diff --git a/.gitignore b/.gitignore index dc28414..84a4637 100644 --- a/.gitignore +++ b/.gitignore @@ -7,4 +7,5 @@ extended proc nights only.log no nights.log no twighlights.log no weekends.log -logs/ \ No newline at end of file +logs/ +.env/ \ No newline at end of file diff --git a/leave.csv b/leave.csv index 53fa1ae..e703237 100644 --- a/leave.csv +++ b/leave.csv @@ -1,378 +1,387 @@ -Rota 2021/2022,,, (POSSIBLE IDT),,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,80% until dec 1st,,,,,,,,,,,,,,, -Name,,Stephanie Bailey,Luciana Calovi Motschenbacher,Layla Bell,Seren Peters,Alex wood,Salma Aslam,Max Ireland,Charles Finan,Paul Ward,Tom Welsh,Matt Murphey,Delilah Trimmer,Max Finzel,Zainab Sharaf,Maththew O'Brien,Kyaw Tint,Nicolas Dziadulewicz,Jean Skumar,Michael Tomek,Vilim Kalamar,Dhuvresh Patel,Khalil Madbak,Georgina Edwards,Jenn Haw fong,Paul Jenkins,Jenna Millington,Amoolya Mannava,Ross Kruger,Sophie McGlade,Rebecca Murphy,Natasha Hougham,Jon Skinner,Fiona Lyall,Joel Lim,Wijhdan Abusrewil,Mark Haley,Andrew MacCormick,Alexander Sanchez - cabello,Sayed Hashim Alqarooni,Chong Yew Ng,Matthew Thorley,Harriet Conley,Cameron Bullock,Alexander Wijnberg,Christian Greer,Alan Eccles,Hannah Lewis,Sarath Vennam,Amina Odeh,Mo Babsail,Richard Chaytor,Sherafghan PROC,Madalina Drumea,Mark Fellows,Clement Leung -Rotation,,Exeter,Exeter,Exeter,Exeter,Exeter,Exeter,Exeter,Exeter,Exeter,Exeter,Exeter,Exeter,Derriford,Derriford,Derriford,Derriford,Derriford,Derriford,Derriford,Derriford,Derriford,Derriford,Derriford,Derriford,Derriford,Derriford,Derriford,Derriford,Derriford,Derriford,Derriford,Derriford Twilights,Derriford Twilights,Torbay,Torbay,Torbay,Torbay,Torbay,Torbay,Torbay,Torbay,Torbay,Truro,Truro,Truro,Truro,Truro,Truro,Truro,Truro,Truro,Truro no PROC,Barnstaple,Taunton,Taunton -Grade,,ST2,ST2,ST2,ST3,ST3,ST3,ST3,ST4,ST4,ST5,ST5,ST5,ST2,ST2,ST2,ST2,ST3,ST3,ST3,ST3,ST3,ST4,ST4,ST4,ST4,ST4,ST5,ST5,ST5,ST5,ST5,ST6,ST6,ST2,ST2,ST2,ST2,ST3,ST4,ST4,ST4,ST5,ST2,ST2,ST3,ST3,ST3,ST4,ST4,ST5,ST5,ST5 (until dec),ST3,ST2,ST4 -PROC site,,Derriford,,exeter,Torbay,Exeter,,Derriford,Derriford,Exeter,Exeter,Exeter,Derriford,Derriford,torbay,Torbay,derriford,,derriford,exeter,,Exeter,,,derriford,Derriford,,derriford,Derriford,Derriford,Exeter,,NA,NA,derriford,Torbay,Derriford,Derriford,,torbay,Derriford,Derriford,Derriford,Exeter,Derriford,Truro,Truro,Derriford,Truro,Truro,Derriford,derriford,Derriford,torbay,NA,NA -%FTE,,100,0,100,100,100,60,100,100,100,100,100,60,100,100,100,100,100,60,80,100,100,0,80,100,100,60,100,100,80,100,0,100,60,100,100,100,100,100,100,90,100,60,100,100,100,80,100,100,100,100,100,100,100,0,0 -NWD,,,,,,,"Thursday,Friday",,"Tuesday,Thursday",,,Thursday,"Monday,Tuesday",,,,,,"Monday,thursday",Wednesday,,,,Friday,,,,,,Friday,,,,"monday,friday",,"thursday, friday",,,,,Monday[6/9/21-30/11/21],,"monday,thursday",,,,Friday,,,,,,,,, -Flexible NWD,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -End Date,,,,,,,,,,,,04/02/22,,,,,,,,,,,,,,,,,,,,15/01/22,,,,,,,,,,,,,,,,,,,,,,,, -OOP,,,,,,,6/9/21-31/3/22,,,,,,,,,,,,,,,,,,,,6/9/21-2/5/22,,,1/1/22-5/9/22,6/9/21-28/2/22,,,,,,,,,,,,6/9/21-20/9/21,,,,,,,,,,,,, -Group,,Y1G1,Y1G1,Y1G2,Y3G1,Y3G1,Y3G2,Y3G2,,,,,,Y2G1,Y2G2,Y2G2,Y2G2,Y3G1,Y3G1,Y3G2,Y3G2,Y3G2,,,,,,,,,,,,,Y2G1,Y2G1,Y2G2,Y2G2,Y3G2,,,,,Y2G1,Y2G2,Y3G1,Y3G1,Y3G2,,,,,,,Y2G1, -?PROC,,,,,,,,,,,,,,,,,,,,,,,NO,,,,,,,,,,No,No,,,,,,,,,,,,,,,,,,,Yes - until ST6 in dec,???,NO,NO -Pair,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,2,,, -Date,Exams,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -6/9/21,,,NO ONCALL,,,POST ONCALL,Mat leave,,exeter_twilight,,exeter_twilight,exeter_twilight,,,A/L,,,,,A/L,,,No Oncall,POST ONCALL,POST ONCALL,POST ONCALL,Mat leave,,,plymouth_twilight,OOPT,OOPT,POST ONCALL,NO oncals,,POST ONCALL,,,,A/L,torbay_twilight,torbay_twilight,Mat leave,,,,,truro_twilight,truro_twilight,,A/L,POST ONCALL,,,, -7/9/21,,,NO ONCALL,,,POST ONCALL,Mat leave,,exeter_twilight,,exeter_twilight,exeter_twilight,,,A/L,,,,,A/L,,,No Oncall,POST ONCALL,POST ONCALL,POST ONCALL,Mat leave,,,plymouth_twilight,OOPT,OOPT,POST ONCALL,NO oncals,,POST ONCALL,,,,A/L,torbay_twilight,torbay_twilight,Mat leave,,,,,truro_twilight,truro_twilight,,A/L,POST ONCALL,,,, -8/9/21,,,NO ONCALL,,,,Mat leave,,2b course,2b course,,,,,,,,,,A/L,,,No Oncall,2b course,2b course,,Mat leave,,2b course,,OOPT,OOPT,,NO oncals,,,,,,A/L,2b course,2b course,Mat leave,,,,,,2b course,2b course,A/L,,,,, -9/9/21,,,NO ONCALL,,,,Mat leave,,2b course,2b course,,,,,,,,,,A/L,,,No Oncall,2b course,2b course,,Mat leave,,2b course,,OOPT,OOPT,,NO oncals,,,,,,A/L,2b course,2b course,Mat leave,,,,,,2b course,2b course,A/L,,,,, -10/9/21,,,NO ONCALL,,A/L,,Mat leave,,,,,,,,,,,,,A/L,,,No Oncall,,,,Mat leave,,,A/L,OOPT,OOPT,,NO oncals,,,,,,,,,Mat leave,,,,,,,,A/L,,,,, -11/9/21,,,NO ONCALL,,A/L,,Mat leave,,,,,,,,,,,,,A/L,,,No Oncall,,,,Mat leave,,,A/L,OOPT,OOPT,,NO oncals,,,,,,,,,Mat leave,,,,,,,,A/L,,,,, -12/9/21,,,NO ONCALL,,A/L,,Mat leave,,,,,,,,,,,,,A/L,,,No Oncall,,,,Mat leave,,,A/L,OOPT,OOPT,,NO oncals,,,,,,,,,Mat leave,,,,,,,,A/L,,,,, -13/9/21,,,NO ONCALL,,A/L,,Mat leave,,,,,,,,,,,,,A/L,,,No Oncall,,,,Mat leave,,,A/L,OOPT,OOPT,,NO oncals,,,,,,,,,Mat leave,,,,,,,,,,,,, -14/9/21,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,A/L,,,No Oncall,,,,Mat leave,,,,OOPT,OOPT,,NO oncals,,,,,,,,,Mat leave,,,,,,,,,,,,, -15/9/21,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,A/L,,,No Oncall,,,,Mat leave,,,,OOPT,OOPT,,NO oncals,,,,,,,,,Mat leave,,,,,,,,,,,,, -16/9/21,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,A/L,,,No Oncall,,,,Mat leave,,,,OOPT,OOPT,,NO oncals,,,,,,,,,Mat leave,,,,,,,,,,,,, -17/9/21,Pre 2B,,NO ONCALL,,,,Mat leave,,Pre 2B,Pre 2B,A/L,,Pre 2B,,,,,,,A/L,,,No Oncall,,Pre 2B,,Mat leave,,,,OOPT,OOPT,,NO oncals,,,,,,Pre 2B,Pre 2B,Pre 2B,Mat leave,,,,Pre 2B,,Pre 2B,Pre 2B,,,,,, -18/9/21,Pre 2B,,NO ONCALL,,,,Mat leave,,Pre 2B,Pre 2B,A/L,,Pre 2B,,,,,,,,,,No Oncall,,Pre 2B,,Mat leave,,,,OOPT,OOPT,,NO oncals,,,,,,Pre 2B,Pre 2B,Pre 2B,Mat leave,,,,Pre 2B,,Pre 2B,Pre 2B,,,,,, -19/9/21,Pre 2B,,NO ONCALL,,,,Mat leave,,Pre 2B,Pre 2B,A/L,,Pre 2B,,,,,,,,,,No Oncall,,Pre 2B,,Mat leave,,,,OOPT,OOPT,,NO oncals,,,,,,Pre 2B,Pre 2B,Pre 2B,Mat leave,,,,Pre 2B,,Pre 2B,Pre 2B,,,,,, -20/9/21,Pre 2B,,NO ONCALL,,,,Mat leave,,Pre 2B,Pre 2B,A/L,,Pre 2B,,,,,,,,,,No Oncall,,Pre 2B,,Mat leave,,,,OOPT,OOPT,,NO oncals,,,,,,Pre 2B,Pre 2B,Pre 2B,Mat leave,,,,Pre 2B,,Pre 2B,Pre 2B,,,,,, -21/9/21,Pre 2B,,NO ONCALL,,,,Mat leave,,Pre 2B,Pre 2B,,,Pre 2B,,,,,,,,,,No Oncall,,Pre 2B,,Mat leave,,,,OOPT,OOPT,,NO oncals,,,,,,Pre 2B,Pre 2B,Pre 2B,No nights,,,,Pre 2B,,Pre 2B,Pre 2B,,,,,, -22/9/21,Pre 2B,,NO ONCALL,,,,Mat leave,,Pre 2B,Pre 2B,,,Pre 2B,,,,,,,,,,No Oncall,,Pre 2B,,Mat leave,,,,OOPT,OOPT,,NO oncals,,,,,,Pre 2B,Pre 2B,Pre 2B,No nights,,,,Pre 2B,,Pre 2B,Pre 2B,,,,,, -23/9/21,Pre 2B,,NO ONCALL,,,,Mat leave,,Pre 2B,Pre 2B,,A/L,Pre 2B,,,,,,,,,,No Oncall,,Pre 2B,,Mat leave,,,,OOPT,OOPT,,NO oncals,,A/L,,,,Pre 2B,Pre 2B,Pre 2B,No nights,,,,Pre 2B,,Pre 2B,Pre 2B,,,,,, -24/9/21,Pre 2B,,NO ONCALL,,,,Mat leave,,Pre 2B,Pre 2B,,,Pre 2B,,,,,,,,,,No Oncall,,Pre 2B,,Mat leave,,,,OOPT,OOPT,,NO oncals,,A/L,,,,Pre 2B,Pre 2B,Pre 2B,A/L,,,,Pre 2B,,Pre 2B,Pre 2B,,,,,, -25/9/21,Pre 2B,,NO ONCALL,,,,Mat leave,,Pre 2B,Pre 2B,,,Pre 2B,,,,,,,,,,No Oncall,,Pre 2B,,Mat leave,,,,OOPT,OOPT,,NO oncals,,A/L,,,,Pre 2B,Pre 2B,Pre 2B,A/L,,,,Pre 2B,,Pre 2B,Pre 2B,,,,,, -26/9/21,Pre 2B,,NO ONCALL,,,,Mat leave,,Pre 2B,Pre 2B,,,Pre 2B,,,,,,,,,,No Oncall,,Pre 2B,,Mat leave,,,,OOPT,OOPT,,NO oncals,,A/L,,,,Pre 2B,Pre 2B,Pre 2B,A/L,,,,Pre 2B,,Pre 2B,Pre 2B,,,,,, -27/9/21,Pre 2B,,NO ONCALL,,,,Mat leave,,Pre 2B,Pre 2B,,,Pre 2B,,,,,,,,,,No Oncall,,Pre 2B,,Mat leave,,,,OOPT,OOPT,,,,,,,,Pre 2B,Pre 2B,Pre 2B,No nights,,,,Pre 2B,,Pre 2B,Pre 2B,,,,,, -28/9/21,Pre 2B,,NO ONCALL,,,,Mat leave,,Pre 2B,Pre 2B,,,Pre 2B,,,,,,,,,,No Oncall,,Pre 2B,,Mat leave,,,,OOPT,OOPT,,,,,,,,Pre 2B,Pre 2B,Pre 2B,No nights,,,,Pre 2B,,Pre 2B,Pre 2B,,,,,, -29/9/21,Pre 2B,,NO ONCALL,,,,Mat leave,,Pre 2B,Pre 2B,,,Pre 2B,,,,,,,,,,No Oncall,,Pre 2B,,Mat leave,,,,OOPT,OOPT,,,,,,,,Pre 2B,Pre 2B,Pre 2B,No nights,,,,Pre 2B,,Pre 2B,Pre 2B,,,,,, -30/9/21,Pre 2B,,NO ONCALL,,,,Mat leave,,Pre 2B,Pre 2B,,,Pre 2B,,,,,,,,,,No Oncall,,Pre 2B,,Mat leave,,,,OOPT,OOPT,,,,,,,,Pre 2B,Pre 2B,Pre 2B,No nights,,,,Pre 2B,,Pre 2B,Pre 2B,,,,,, -1/10/21,2B,,NO ONCALL,,,,Mat leave,,2B,2B,A/L,,2B,A/L,,,,,,,,,No Oncall,,2B,,Mat leave,,,,OOPT,OOPT,,,,,,,,2B,2B,2B,No nights,,,,2B,,2B,2B,,,,,, -2/10/21,2B,,NO ONCALL,,,,Mat leave,,2B,2B,A/L,,2B,A/L,,,,,,,,,No Oncall,,2B,,Mat leave,,,,OOPT,OOPT,,,,,,,,2B,2B,2B,No nights,,,,2B,,2B,2B,,,,,, -3/10/21,2B,,NO ONCALL,,,,Mat leave,,2B,2B,A/L,,2B,A/L,,,,,,,,,No Oncall,,2B,,Mat leave,,,,OOPT,OOPT,,,,,,,,2B,2B,2B,No nights,,,,2B,,2B,2B,,,,,, -4/10/21,2B,,NO ONCALL,,,,Mat leave,,2B,2B,A/L,,2B,,,,,,,,,,No Oncall,,2B,,Mat leave,,,,OOPT,OOPT,,,,,,,,2B,2B,2B,No nights,,,,2B,,2B,2B,,,,,, -5/10/21,2B,,NO ONCALL,,,,Mat leave,,2B,2B,,,2B,,,,,,,,,,No Oncall,,2B,,Mat leave,,,,OOPT,OOPT,,,,,,,,2B,2B,2B,No nights,,,,2B,,2B,2B,,,,,, -6/10/21,2B,,NO ONCALL,,,,Mat leave,,2B,2B,,,2B,,,,,,,,,,No Oncall,,2B,,Mat leave,,,,OOPT,OOPT,,,,,,,,2B,2B,2B,No nights,,,,2B,,2B,2B,,,,,, -7/10/21,2B,,NO ONCALL,,,,Mat leave,,2B,2B,,,2B,,,,,,,,,,No Oncall,,2B,,Mat leave,,,,OOPT,OOPT,,,,,,,,2B,2B,2B,No nights,,,,2B,,2B,2B,,,,,, -8/10/21,2B,,NO ONCALL,,,,Mat leave,,2B,2B,,,2B,,,,,,,,,,No Oncall,,2B,,Mat leave,,,A/L,OOPT,OOPT,,,,,,,,2B,2B,2B,No nights,,,,2B,,2B,2B,,,,,, -9/10/21,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,A/L,OOPT,OOPT,,,,,,,,,,,No nights,,,,,,,,,,,,, -10/10/21,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,A/L,OOPT,OOPT,,,,,,,,,,,No nights,,,,,,,,,,,,, -11/10/21,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,A/L,OOPT,OOPT,,,,,,,,,,,No nights,,,,,,,,,,,,, -12/10/21,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,OOPT,,,,,,,,,,,No nights,,,,,,,,,,,,, -13/10/21,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,OOPT,,,,,,,,,,,No nights,,,,,,,,,,,,, -14/10/21,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,OOPT,,,,,,,,,,,No nights,,,,,,,,,,,,, -15/10/21,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,OOPT,,,,,,,,,,,No nights,,,,,,,,,,,,, -16/10/21,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,OOPT,,,,,,,,,,,No nights,,,,,,,,,,,,, -17/10/21,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,OOPT,,,,,,,,,,,No nights,,,,,,,,,,,,, -18/10/21,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,OOPT,,,,,,,,,,,No nights,,,,,,,,,,,,, -19/10/21,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,OOPT,,,,,,,,,,,No nights,,,,,,,,,,,,, -20/10/21,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,OOPT,,,,,,,,,,,No nights,,,,,,,,,,,,, -21/10/21,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,OOPT,,,,,,,,,,,No nights,,,,,,,,,,,,, -22/10/21,,,NO ONCALL,,,,Mat leave,,A/L,,A/L,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,OOPT,,,,,,,A/L,,,,No nights,,,,,A/L,,,,,,,, -23/10/21,,,NO ONCALL,,,,Mat leave,,A/L,,A/L,,,,A/L,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,OOPT,,A/L,,,,,A/L,A/L,,,,,,,,A/L,,,,,,,, -24/10/21,,,NO ONCALL,,,,Mat leave,,A/L,,A/L,,,,A/L,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,OOPT,,A/L,,,,,A/L,A/L,,,,,,,,A/L,,,,,,,, -25/10/21,,,NO ONCALL,,,,Mat leave,,A/L,,A/L,,,,A/L,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,A/L,,,,,,A/L,,,,,,,,,,,,,,,, -26/10/21,,,NO ONCALL,,,,Mat leave,,,,A/L,,,,A/L,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,A/L,,,,,,A/L,,,,,,,,,,,,,,,, -27/10/21,,,NO ONCALL,,,,Mat leave,,,,A/L,,,,A/L,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,A/L,,,,,,A/L,,,,,,,,,,,,,,,, -28/10/21,,,NO ONCALL,,,,Mat leave,,,,A/L,,,,A/L,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,A/L,,,,,,A/L,,,,,,,,,,,,,,,, -29/10/21,,,NO ONCALL,,,,Mat leave,,,,A/L,,,,A/L,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,A/L,,,,,,A/L,,,,,,,,,,,,,,,, -30/10/21,,,NO ONCALL,,,A/L,Mat leave,,,,A/L,,,,A/L,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,A/L,,A/L,,,,A/L,,,,,,,,,,,,,,,, -31/10/21,,,NO ONCALL,,,A/L,Mat leave,,,,A/L,,,,A/L,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,A/L,,A/L,,,,A/L,,,,,,,,,,,,,,,, -1/11/21,Pre 2a,,NO ONCALL,,Pre 2a,Pre 2a,Mat leave,Pre 2a,,Pre 2a,,,,,,,,Pre 2a,Pre 2a,Pre 2a,Pre 2a,Pre 2a,No Oncall,Pre 2a,Pre 2a,,Mat leave,,,,OOPT,,,,,Pre 2a,,,Pre 2a,,Pre 2a,,,,,Pre 2a,,Pre 2a,Pre 2a,,,,,Pre 2a,,Pre 2a -2/11/21,Pre 2a,,NO ONCALL,,Pre 2a,Pre 2a,Mat leave,Pre 2a,,Pre 2a,,,,,,,,Pre 2a,Pre 2a,Pre 2a,Pre 2a,Pre 2a,No Oncall,Pre 2a,Pre 2a,,Mat leave,,,,OOPT,,,,,Pre 2a,,,Pre 2a,,Pre 2a,,,,,Pre 2a,,Pre 2a,Pre 2a,,,,,Pre 2a,,Pre 2a -3/11/21,Pre 2a,,NO ONCALL,,Pre 2a,Pre 2a,Mat leave,Pre 2a,,Pre 2a,,,,,,,,Pre 2a,Pre 2a,Pre 2a,Pre 2a,Pre 2a,No Oncall,Pre 2a,Pre 2a,,Mat leave,,,,OOPT,,,,,Pre 2a,,,Pre 2a,,Pre 2a,,,,,Pre 2a,,Pre 2a,Pre 2a,,A/L,,,Pre 2a,,Pre 2a -4/11/21,Pre 2a,,NO ONCALL,,Pre 2a,Pre 2a,Mat leave,Pre 2a,,Pre 2a,,,,,,,,Pre 2a,Pre 2a,Pre 2a,Pre 2a,Pre 2a,No Oncall,Pre 2a,Pre 2a,,Mat leave,,,,OOPT,,,,,Pre 2a,,,Pre 2a,,Pre 2a,,,,,Pre 2a,,Pre 2a,Pre 2a,,A/L,,,Pre 2a,,Pre 2a -5/11/21,Pre 2a,,NO ONCALL,,Pre 2a,Pre 2a,Mat leave,Pre 2a,,Pre 2a,,,,,,,,Pre 2a,Pre 2a,Pre 2a,Pre 2a,Pre 2a,No Oncall,Pre 2a,Pre 2a,,Mat leave,,,A/L,OOPT,,,,,Pre 2a,,,Pre 2a,,Pre 2a,,,,,Pre 2a,,Pre 2a,Pre 2a,,A/L,,,Pre 2a,,Pre 2a -6/11/21,Pre 2a,,NO ONCALL,,Pre 2a,Pre 2a,Mat leave,Pre 2a,,Pre 2a,,,,,,,,Pre 2a,Pre 2a,Pre 2a,Pre 2a,Pre 2a,No Oncall,Pre 2a,Pre 2a,,Mat leave,,,A/L,OOPT,,,,,Pre 2a,,,Pre 2a,,Pre 2a,,,,,Pre 2a,,Pre 2a,Pre 2a,,A/L,,,Pre 2a,,Pre 2a -7/11/21,Pre 2a,,NO ONCALL,,Pre 2a,Pre 2a,Mat leave,Pre 2a,,Pre 2a,,,,,,,,Pre 2a,Pre 2a,Pre 2a,Pre 2a,Pre 2a,No Oncall,Pre 2a,Pre 2a,,Mat leave,,,A/L,OOPT,,,,,Pre 2a,,,Pre 2a,,Pre 2a,,,,,Pre 2a,,Pre 2a,Pre 2a,,A/L,,,Pre 2a,,Pre 2a -8/11/21,Pre 2a,,NO ONCALL,,Pre 2a,Pre 2a,Mat leave,Pre 2a,,Pre 2a,,,,,,,,Pre 2a,Pre 2a,Pre 2a,Pre 2a,Pre 2a,No Oncall,Pre 2a,Pre 2a,,Mat leave,,,,OOPT,,,,,Pre 2a,,,Pre 2a,,Pre 2a,,,,,Pre 2a,,Pre 2a,Pre 2a,,,,,Pre 2a,,Pre 2a -9/11/21,Pre 2a,,NO ONCALL,,Pre 2a,Pre 2a,Mat leave,Pre 2a,,Pre 2a,,,,,,,,Pre 2a,Pre 2a,Pre 2a,Pre 2a,Pre 2a,No Oncall,Pre 2a,Pre 2a,,Mat leave,,,,OOPT,,,,,Pre 2a,,,Pre 2a,,Pre 2a,,,,,Pre 2a,,Pre 2a,Pre 2a,,,,,Pre 2a,,Pre 2a -10/11/21,Pre 2a,,NO ONCALL,,Pre 2a,Pre 2a,Mat leave,Pre 2a,,Pre 2a,,,,,,,,Pre 2a,Pre 2a,Pre 2a,Pre 2a,Pre 2a,No Oncall,Pre 2a,Pre 2a,,Mat leave,,,,OOPT,,,,,Pre 2a,,,Pre 2a,,Pre 2a,,,,,Pre 2a,,Pre 2a,Pre 2a,,A/L,,,Pre 2a,,Pre 2a -11/11/21,Pre 2a,,NO ONCALL,,Pre 2a,Pre 2a,Mat leave,Pre 2a,,Pre 2a,,,,,,,,Pre 2a,Pre 2a,Pre 2a,Pre 2a,Pre 2a,No Oncall,Pre 2a,Pre 2a,,Mat leave,,,,OOPT,,,,,Pre 2a,,,Pre 2a,,Pre 2a,,,,,Pre 2a,,Pre 2a,Pre 2a,,A/L,,,Pre 2a,,Pre 2a -12/11/21,Pre 2a,,NO ONCALL,,Pre 2a,Pre 2a,Mat leave,Pre 2a,,Pre 2a,,,,,,,,Pre 2a,Pre 2a,Pre 2a,Pre 2a,Pre 2a,No Oncall,Pre 2a,Pre 2a,,Mat leave,,,,OOPT,,,,,Pre 2a,,,Pre 2a,,Pre 2a,,,,,Pre 2a,,Pre 2a,Pre 2a,,A/L,,,Pre 2a,,Pre 2a -13/11/21,Pre 2a,,NO ONCALL,,Pre 2a,Pre 2a,Mat leave,Pre 2a,,Pre 2a,,,,,,,,Pre 2a,Pre 2a,Pre 2a,Pre 2a,Pre 2a,No Oncall,Pre 2a,Pre 2a,,Mat leave,,,,OOPT,,,,A/L,Pre 2a,,,Pre 2a,,Pre 2a,,,,,Pre 2a,,Pre 2a,Pre 2a,,A/L,,,Pre 2a,,Pre 2a -14/11/21,Pre 2a,,NO ONCALL,,Pre 2a,Pre 2a,Mat leave,Pre 2a,,Pre 2a,,,,,,,,Pre 2a,Pre 2a,Pre 2a,Pre 2a,Pre 2a,No Oncall,Pre 2a,Pre 2a,,Mat leave,,,,OOPT,,,,A/L,Pre 2a,,,Pre 2a,,Pre 2a,,,,,Pre 2a,,Pre 2a,Pre 2a,,A/L,,,Pre 2a,,Pre 2a -15/11/21,Pre 2a,,NO ONCALL,,Pre 2a,Pre 2a,Mat leave,Pre 2a,,Pre 2a,,,,,,,,Pre 2a,Pre 2a,Pre 2a,Pre 2a,Pre 2a,No Oncall,Pre 2a,Pre 2a,,Mat leave,,,,OOPT,,,,A/L,Pre 2a,,,Pre 2a,,Pre 2a,,,,,Pre 2a,,Pre 2a,Pre 2a,,,,,Pre 2a,,Pre 2a -16/11/21,Pre 2a,,NO ONCALL,,Pre 2a,Pre 2a,Mat leave,Pre 2a,,Pre 2a,,,,,,,,Pre 2a,Pre 2a,Pre 2a,Pre 2a,Pre 2a,No Oncall,Pre 2a,Pre 2a,,Mat leave,,,,OOPT,,,,A/L,Pre 2a,,,Pre 2a,,Pre 2a,,,,,Pre 2a,,Pre 2a,Pre 2a,,,,,Pre 2a,,Pre 2a -17/11/21,2A,,NO ONCALL,,2A,2A,Mat leave,2A,,2A,,,,,,,,2A,2A,2A,2A,2A,No Oncall,2A,2A,,Mat leave,,,,OOPT,,,,A/L,2A,,,2A,,2A,,,,,2A,,2A,2A,,,,,2A,,2A -18/11/21,,,NO ONCALL,,,,Mat leave,,,,,S/L,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,A/L,,,,A/L,,,,,,,,,A/L,,,,,,,, -19/11/21,,,NO ONCALL,,,,Mat leave,,,,,S/L,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,A/L,,,,A/L,,,,,,,,,A/L,,,,,,,, -20/11/21,,,NO ONCALL,,,A/L,Mat leave,,,,,S/L,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,A/L,,,,A/L,,,,,,,,,A/L,,,A/L,,,,, -21/11/21,,,NO ONCALL,,,A/L,Mat leave,,,,,S/L,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,A/L,,,,A/L,,,,,,,,,A/L,,,A/L,,,,, -22/11/21,,,NO ONCALL,,,A/L,Mat leave,,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,A/L,,,,A/L,,,,,,,,,A/L,,,A/L,,,,, -23/11/21,,,NO ONCALL,,,A/L,Mat leave,,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,A/L,,,,A/L,,,,,,,,,A/L,,,A/L,,,,, -24/11/21,,,NO ONCALL,,,A/L,Mat leave,,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,A/L,,,,A/L,,,,,,,,,A/L,,,A/L,,,,, -25/11/21,,,NO ONCALL,,,A/L,Mat leave,,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,A/L,,,,A/L,,,,,,,,,A/L,,,A/L,,,,, -26/11/21,,,NO ONCALL,,,A/L,Mat leave,,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,A/L,,,,A/L,,,,,,,,,A/L,,,A/L,,,,, -27/11/21,,,NO ONCALL,,,A/L,Mat leave,,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,A/L,,,,A/L,,,,,,,,,A/L,,,A/L,,,,, -28/11/21,,,NO ONCALL,,,A/L,Mat leave,,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,A/L,,,,A/L,,,,,,,,,A/L,,,A/L,,,,, -29/11/21,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,,,,,A/L,,,,,,,,,A/L,,,A/L,,,,, -30/11/21,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,,,,,A/L,,,,,,,,,A/L,,,A/L,,,,, -1/12/21,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,,,,,A/L,,,,,,,,,A/L,,,A/L,,,,, -2/12/21,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,,,,,A/L,,,,,,,,,A/L,,,A/L,,,,, -3/12/21,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,OFF,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,,,,,A/L,,,,,,,,,A/L,,,A/L,,,,, -4/12/21,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,OFF,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,,,,,,,,,,,,,,A/L,,,A/L,,,,, -5/12/21,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,OFF,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,,,,,,,,,,,,,,A/L,,,A/L,,,,, -6/12/21,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,, -7/12/21,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,, -8/12/21,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,, -9/12/21,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,,,,,,,,,,,,,,,,,,A/L,,,, -10/12/21,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,,,,,,,,,,,,,,,,,,A/L,,,, -11/12/21,,,NO ONCALL,,,,Mat leave,,A/L,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,,,A/L,,,,,,,,,,,,,,,A/L,,,, -12/12/21,,,NO ONCALL,,,,Mat leave,,A/L,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,,,A/L,,,,,,,,,,,,,,,A/L,,,, -13/12/21,,,NO ONCALL,,,,Mat leave,,A/L,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,,,A/L,,,,,,,,,,,,,,,,,,, -14/12/21,,,NO ONCALL,,,,Mat leave,,A/L,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,,,A/L,,,,,,,,,,,,,,,,,,, -15/12/21,,,NO ONCALL,,,,Mat leave,,A/L,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,,,A/L,,,,,,,,,,,,,,,,,,, -16/12/21,,,NO ONCALL,,,,Mat leave,,A/L,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,,,A/L,,,,,,,,,,,,,,,,,,, -17/12/21,,,NO ONCALL,,,,Mat leave,,A/L,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,A/L,OOPT,,,,,,A/L,,,,,,,,,,,,,,,,,,, -18/12/21,,,NO ONCALL,,,,Mat leave,,A/L,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,A/L,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,A/L -19/12/21,,,NO ONCALL,,,,Mat leave,,A/L,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,A/L,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,A/L -20/12/21,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,A/L -21/12/21,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,A/L -22/12/21,,,NO ONCALL,,,,Mat leave,,,,,,,A/L,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,A/L -23/12/21,,,NO ONCALL,,OFF,,Mat leave,,,,,,,A/L,,,,,,,OFF,,No Oncall,,,,Mat leave,,,,OOPT,,,,,,,,OFF,OFF,OFF,,,,,,,OFF,OFF,,OFF,,,OFF,,A/L -24/12/21,,,NO ONCALL,,OFF,,Mat leave,,,,,,,A/L,,,,,,,OFF,,No Oncall,,,,Mat leave,,,,OOPT,,,,,,,,OFF,OFF,OFF,,,,,,,OFF,OFF,,OFF,,,OFF,,A/L -25/12/21,,,NO ONCALL,,OFF,,Mat leave,,,,,,,A/L,,,,,,,OFF,,No Oncall,,,,Mat leave,,,,OOPT,,,,,,,,OFF,OFF,OFF,,,,,,,OFF,OFF,,OFF,,,OFF,,A/L -26/12/21,,,NO ONCALL,,OFF,,Mat leave,,,,,,,A/L,,,,,,,OFF,,No Oncall,,,,Mat leave,,,,OOPT,,,,,,,,OFF,OFF,OFF,,,,,,,OFF,OFF,,OFF,,,OFF,,A/L -27/12/21,,,NO ONCALL,,OFF,,Mat leave,,,,,,,A/L,,,,,,,OFF,,No Oncall,,,,Mat leave,,,,OOPT,,,,,,,,OFF,OFF,OFF,,,,,,,OFF,OFF,,OFF,,,OFF,,A/L -28/12/21,,,NO ONCALL,,,,Mat leave,,,,,,,A/L,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,,,,,,OFF,,,,,,,,,,,,,,,,A/L -29/12/21,,,NO ONCALL,,,,Mat leave,,,,,,,A/L,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,,,,,,OFF,,,,,,,,,,,,,,,,A/L -30/12/21,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,,,,,,OFF,,,,,,,,,,,,,,,,A/L -31/12/21,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,,,,,,OFF,,,,,,,,,,,,,,,,A/L -1/1/22,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,OOPT,,,,,,,,,OFF,,,,,,,,,,,,,,,,A/L -2/1/22,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,OOPT,,,,,,,,,OFF,,,,,,,,,,,,,,,,A/L -3/1/22,,,NO ONCALL,,,,Mat leave,,,,,,,,A/L,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,OOPT,,,,,A/L,,,,OFF,,,,,,,,,,,,,,,,A/L -4/1/22,,,NO ONCALL,,,,Mat leave,,,,,A/L,,,A/L,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,OOPT,,,,,A/L,,,,OFF,,,,,,,,,,,,,,,,A/L -5/1/22,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,OOPT,,,,,A/L,,,,,,,,,,,,,,,,,,,,A/L -6/1/22,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,OOPT,,,,,A/L,,,,,,,,,,,,,,,,,,,,A/L -7/1/22,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,OOPT,,,,,A/L,,,,,,,,,,,,,,,,,,,,A/L -8/1/22,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,OOPT,,,,,A/L,,,,,,,,,,,,,,,A/L,,,,,A/L -9/1/22,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,OOPT,,,,,A/L,,,,,,,,,,,,,,,A/L,,,,,A/L -10/1/22,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,OOPT,,,,,,,,,,,,,,,,,,,,A/L,,,,, -11/1/22,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,OOPT,,,,,,,,,,,,,,,,,,,,A/L,,,,, -12/1/22,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,OOPT,,,,,,,,,,,,,,,,,,,,A/L,,,,, -13/1/22,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,OOPT,,,,,,,,,,,,,,,,,,,,A/L,,,,, -14/1/22,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,OOPT,,,,,,,,,,,,,,,,,,,,A/L,,,,, -15/1/22,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,OOPT,,,,,,,,,,,,,,,,,,,,A/L,,,,, -16/1/22,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,OOPT,,,,,,,,,,,,,,,,,,,,A/L,,,,, -17/1/22,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,OOPT,,,,,,,,,,,,,,,,,,,,,,,,, -18/1/22,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,OOPT,,,,,,,,,,,,,,,,,,,,,,,,, -19/1/22,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,OOPT,,,,,,,,,,,,,,,,,,,,,,,,, -20/1/22,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,OOPT,,,,,,,,,,,,,,,,,,,,,,,,, -21/1/22,,,NO ONCALL,,A/L,,Mat leave,,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,OOPT,,,,,,,,,,,,A/L,,,,,,,,,,,,, -22/1/22,,,NO ONCALL,,A/L,,Mat leave,,A/L,,,,,,,,,,,,,,No Oncall,,A/L,,Mat leave,,,OOPT,OOPT,,,,,,,,,,,,A/L,,,,,,,,,,,,, -23/1/22,,,NO ONCALL,,A/L,,Mat leave,,A/L,,,,,,,,,,,,,,No Oncall,,A/L,,Mat leave,,,OOPT,OOPT,,,,,,,,,,,,A/L,,,,,,,,,,,,, -24/1/22,,,NO ONCALL,,A/L,,Mat leave,,A/L,,,,,,,,,,,,,,No Oncall,,A/L,,Mat leave,,,OOPT,OOPT,,,,,,,,,,,,,,,,,,,,,,,,, -25/1/22,,,NO ONCALL,,,,Mat leave,,A/L,,,,,,,,,,,,,,No Oncall,,A/L,,Mat leave,,,OOPT,OOPT,,,,,,,,,,,,,,,,,,,,,,,,, -26/1/22,,,NO ONCALL,,,,Mat leave,,A/L,,,,,,,,,,,,,,No Oncall,,A/L,,Mat leave,,,OOPT,OOPT,,,,,,,,,,,,,,,,,,,,,,,,, -27/1/22,,,NO ONCALL,,,,Mat leave,,A/L,,,,,,,,,,,,,,No Oncall,,A/L,,Mat leave,,,OOPT,OOPT,,,,,,,,,,,,,,,,,,,,,,,,, -28/1/22,,,NO ONCALL,,,,Mat leave,,A/L,,A/L,,,,,,,,,,,,No Oncall,,A/L,,Mat leave,,,OOPT,OOPT,,,,,,,,,,,,,,,,,,,,,,,,, -29/1/22,,,NO ONCALL,,,,Mat leave,,A/L,,A/L,,,,,,,,,,,,No Oncall,,A/L,,Mat leave,,,OOPT,OOPT,,,,A/L,,,,,,,,,,,,,,,,,,,,, -30/1/22,,,NO ONCALL,,,,Mat leave,,A/L,,A/L,,,,,,,,,,,,No Oncall,,A/L,,Mat leave,,,OOPT,OOPT,,,,A/L,,,,,,,,,,,,,,,,,,,,, -31/1/22,,,NO ONCALL,,,,Mat leave,,,,A/L,,,,,,,,,,,,No Oncall,,A/L,,Mat leave,,,OOPT,OOPT,,,,A/L,,,,,,,,,,,,,,,,,,,,, -1/2/22,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,,No Oncall,,A/L,,Mat leave,,,OOPT,OOPT,,,,A/L,,,,,,,,,,,,,,,,A/L,,,,, -2/2/22,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,,No Oncall,,A/L,,Mat leave,,,OOPT,OOPT,,,,A/L,,,,,,,,,,,,,A/L,,,A/L,,,,, -3/2/22,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,,No Oncall,,A/L,,Mat leave,,,OOPT,OOPT,,,,A/L,,,,,,,,,,,,,A/L,,,A/L,,,,, -4/2/22,,,NO ONCALL,,,,Mat leave,,,,,CCT,,,,,,,,,,,No Oncall,,A/L,,Mat leave,,,OOPT,OOPT,,,,A/L,,,,,,,,,,,,,A/L,,,A/L,,,,, -5/2/22,,,NO ONCALL,,,,Mat leave,,,,,CCT,,,,,,,,,,,No Oncall,,A/L,,Mat leave,,,OOPT,OOPT,,,,A/L,,,,,,,,,,,,,A/L,,,,A/L,,,, -6/2/22,,,NO ONCALL,,,,Mat leave,,,,,CCT,,,,,,,,,,,No Oncall,,A/L,,Mat leave,,,OOPT,OOPT,,,,A/L,,,,,,,,,,,,,A/L,,,,A/L,,,, -7/2/22,,,NO ONCALL,,,,Mat leave,,,,,CCT,,,,,,,,,,,No Oncall,,A/L,,Mat leave,,,OOPT,OOPT,,,,A/L,,,,,,,,,,,,,,,,,A/L,,,, -8/2/22,,,NO ONCALL,,,,Mat leave,,,,,CCT,,,,,,,,,,,No Oncall,,A/L,,Mat leave,,,OOPT,OOPT,,,,A/L,,,,,,,,,,,,,,,,,A/L,,,, -9/2/22,,,NO ONCALL,,,,Mat leave,,,,,CCT,,,,,,,,,,,No Oncall,,A/L,,Mat leave,,,OOPT,OOPT,,,,A/L,,,,,,,,,,,,,,,,,A/L,,,, -10/2/22,,,NO ONCALL,,,,Mat leave,,,,,CCT,,,,,,,,,,,No Oncall,,A/L,,Mat leave,,,OOPT,OOPT,,,,A/L,,,,,,,,,,,,,,,,,A/L,,,, -11/2/22,,,NO ONCALL,,,,Mat leave,,,,,CCT,,,,,,,,,,,No Oncall,,A/L,,Mat leave,,,OOPT,OOPT,,,,A/L,,,,,,,,,,,,,,,,,A/L,,,, -12/2/22,,,NO ONCALL,,,,Mat leave,,,,,CCT,,,,,,,,,,,No Oncall,,A/L,,Mat leave,,,OOPT,OOPT,,,,A/L,,,,,,,,,,,,,,,,,A/L,,,, -13/2/22,,,NO ONCALL,,,,Mat leave,,,,,CCT,,,,,,,,,,,No Oncall,,A/L,,Mat leave,,,OOPT,OOPT,,,,A/L,,,,,,,,,,,,,,,,,A/L,,,, -14/2/22,,,NO ONCALL,,,,Mat leave,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,OOPT,,,,,,,,,,,,,,,,,,,,,,,,, -15/2/22,,,NO ONCALL,,,,Mat leave,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,OOPT,,,,,,,,,,,,,,,,,,,,,,,,, -16/2/22,,,NO ONCALL,,,,Mat leave,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,OOPT,,,,,,,,,,,,,,,,,,,,,,,,, -17/2/22,,,NO ONCALL,,,,Mat leave,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,OOPT,,,,,,,,,,,,,,,,,,,,,,,,, -18/2/22,,,NO ONCALL,,,,Mat leave,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,OOPT,,,,,,,,,,,,,A/L,,A/L,,A/L,,,,,,,, -19/2/22,,,NO ONCALL,,,,Mat leave,,,,,CCT,,,A/L,,,,,,A/L,,No Oncall,,,,Mat leave,,,OOPT,OOPT,,,A/L,,,,,,A/L,,,,A/L,,A/L,,A/L,,,,,,,, -20/2/22,,,NO ONCALL,,,,Mat leave,,,,,CCT,,,A/L,,,,,,A/L,,No Oncall,,,,Mat leave,,,OOPT,OOPT,,,A/L,,,,,,A/L,,,,A/L,,A/L,,A/L,,,,,,,, -21/2/22,,,NO ONCALL,,,,Mat leave,,,,,CCT,,,A/L,,,,,,A/L,,No Oncall,,,,Mat leave,,,OOPT,OOPT,,,A/L,,,,,,A/L,,,,,,A/L,,,,,,,,,, -22/2/22,,,NO ONCALL,,,,Mat leave,,,,,CCT,,,A/L,,,,,,A/L,,No Oncall,,,,Mat leave,,,OOPT,OOPT,,,A/L,,,,,,A/L,,,,,,A/L,,,,,,,,,, -23/2/22,,,NO ONCALL,,,,Mat leave,,,,,CCT,,,A/L,,,,,,A/L,,No Oncall,,,,Mat leave,,,OOPT,OOPT,,,A/L,,,,,,A/L,,,,,,A/L,,,,,,,,,, -24/2/22,,,NO ONCALL,,,,Mat leave,,,,,CCT,,,A/L,,,,,,A/L,,No Oncall,,,,Mat leave,,,OOPT,OOPT,,,A/L,,,,,,A/L,,,,,,A/L,,,,,,,,,, -25/2/22,,,NO ONCALL,,,,Mat leave,,,,,CCT,,,A/L,,,,,,A/L,,No Oncall,,,,Mat leave,,,OOPT,OOPT,,,A/L,,,,,,A/L,,,,,,,,,,,A/L,,,,, -26/2/22,,,NO ONCALL,,,,Mat leave,,,,,CCT,,,A/L,,,,,,A/L,,No Oncall,,,,Mat leave,,,OOPT,OOPT,,,A/L,,,,,,A/L,,,,,,,,,,,A/L,,,,, -27/2/22,,,NO ONCALL,,,,Mat leave,,,,,CCT,,,A/L,,,,,,A/L,,No Oncall,,,,Mat leave,,,OOPT,OOPT,,,A/L,,,,,,A/L,,,,,,,,,,,A/L,,,,, -28/2/22,,,NO ONCALL,,,,Mat leave,,,,,CCT,,,,,,,,,A/L,,No Oncall,,,,Mat leave,,,OOPT,OOPT,,,,,,,,,,,,,,,,,,,,A/L,,,,, -1/3/22,,,,,,,Mat leave,,,,,CCT,,,,,,,,,A/L,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,,,,,A/L,,,,, -2/3/22,,,,,,,,,,,,CCT,,,,,,,,,A/L,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,,,,,A/L,,,,, -3/3/22,,,,,,,,,,,,CCT,,,,,,,,,A/L,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,,,,,A/L,,,,, -4/3/22,,,,,,,,,,,,CCT,,,,,,,,,A/L,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,,,,,A/L,,,,, -5/3/22,,,,,,,,,,,,CCT,,,,,,,,,A/L,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,,,,,A/L,,,,, -6/3/22,,,,,,,,,,,,CCT,,,,,,,,,A/L,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,,,,,A/L,,,,, -7/3/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -8/3/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -9/3/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -10/3/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -11/3/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,A/L,,,,,,,,,, -12/3/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,A/L,,,,,,,,,, -13/3/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,A/L,,,,,,,,,, -14/3/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,A/L,,,,,,,,,, -15/3/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,A/L,,,,,,,,,, -16/3/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,A/L,,,,,,,,,, -17/3/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,A/L,,,,,,,,,, -18/3/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,A/L,,,,,,,,,, -19/3/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,A/L,,,,,,,,,,A/L,,,,,,,,,, -20/3/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,A/L,,,,,,,,,,A/L,,,,,,,,,, -21/3/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,A/L,,,,,,,,,,A/L,,,,,,,,,, -22/3/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,A/L,,,,,,,,,,,,,,,,,,,, -23/3/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,A/L,,,,,,,,,,,,,,,,,,,, -24/3/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,A/L,,,,,,,,,,,,,,,,,,,, -25/3/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,A/L,,,,,,,,,,,,,,,,,,,, -26/3/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,A/L,,,,,,,,,,,,,,,,,,,, -27/3/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,A/L,,,,,,,,,,,,,,,,,,,, -28/3/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -29/3/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -30/3/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -31/3/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -1/4/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -2/4/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,A/L,,,,,,,,,,,,, -3/4/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,A/L,,,,,,,,,,,,, -4/4/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -5/4/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -6/4/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -7/4/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -8/4/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -9/4/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -10/4/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -11/4/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -12/4/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -13/4/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -14/4/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -15/4/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -16/4/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -17/4/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -18/4/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -19/4/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -20/4/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -21/4/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -22/4/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -23/4/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -24/4/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -25/4/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -26/4/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -27/4/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -28/4/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -29/4/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -30/4/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -1/5/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -2/5/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -3/5/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -4/5/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -5/5/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -6/5/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -7/5/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -8/5/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -9/5/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -10/5/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -11/5/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -12/5/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -13/5/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -14/5/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -15/5/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -16/5/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -17/5/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -18/5/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -19/5/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -20/5/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -21/5/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -22/5/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -23/5/22,,,,,,,,,,,,CCT,,,,A/L,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -24/5/22,,,,,,,,,,,,CCT,,,,A/L,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -25/5/22,,,,,,,,,,,,CCT,,,,A/L,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -26/5/22,,,,,,,,,,,,CCT,,,,A/L,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -27/5/22,,,,,,,,,,,,CCT,,,,A/L,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -28/5/22,,,,,,,,,,,,CCT,,,,A/L,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -29/5/22,,,,,,,,,,,,CCT,,,,A/L,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -30/5/22,,,,,,,,,,,,CCT,,,,A/L,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -31/5/22,,,,,,,,,,,,CCT,,,,A/L,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -1/6/22,,,,,,,,,,,,CCT,,,,A/L,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -2/6/22,,,,,,,,,,,,CCT,,,,A/L,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -3/6/22,,,,,,,,,,,,CCT,,,,A/L,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -4/6/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -5/6/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -6/6/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -7/6/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -8/6/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -9/6/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -10/6/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -11/6/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -12/6/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -13/6/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -14/6/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -15/6/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -16/6/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -17/6/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -18/6/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -19/6/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -20/6/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -21/6/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -22/6/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -23/6/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -24/6/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -25/6/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -26/6/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -27/6/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -28/6/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -29/6/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -30/6/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -1/7/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -2/7/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -3/7/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -4/7/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -5/7/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -6/7/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -7/7/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -8/7/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -9/7/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -10/7/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -11/7/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -12/7/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -13/7/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -14/7/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -15/7/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -16/7/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -17/7/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -18/7/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -19/7/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -20/7/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -21/7/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -22/7/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -23/7/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -24/7/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -25/7/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -26/7/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -27/7/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -28/7/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -29/7/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,A/L,,,,,,,,,,,, -30/7/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,A/L,,,,,,,,,,,, -31/7/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,A/L,,,,,,,,,,,, -1/8/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -2/8/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -3/8/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -4/8/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -5/8/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -6/8/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -7/8/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -8/8/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -9/8/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -10/8/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -11/8/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -12/8/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -13/8/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -14/8/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -15/8/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -16/8/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -17/8/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -18/8/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -19/8/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -20/8/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -21/8/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -22/8/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -23/8/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -24/8/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -25/8/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -26/8/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -27/8/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -28/8/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -29/8/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -30/8/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -31/8/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -1/9/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -2/9/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -3/9/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, -4/9/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, \ No newline at end of file +Rota 2021/2022,,, (POSSIBLE IDT),,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,80% until dec 1st,,,,,,,,,,,,,,,, +Name,,Stephanie Bailey,Luciana Calovi Motschenbacher,Layla Bell,Seren Peters,Alex wood,Salma Aslam,Max Ireland,Charles Finan,Paul Ward,Tom Welsh,Delilah Trimmer,Max Finzel,Zainab Sharaf,Maththew O'Brien,Kyaw Tint,Nicolas Dziadulewicz,Jean Skumar,Michael Tomek,Vilim Kalamar,Dhuvresh Patel,Khalil Madbak,Georgina Edwards,Jenn Haw fong,Paul Jenkins,Jenna Millington,Amoolya Mannava,Ross Kruger,Sophie McGlade,Rebecca Murphy,Fiona Lyall,Joel Lim,Wijhdan Abusrewil,Mark Haley,Andrew MacCormick,Alexander Sanchez - cabello,Sayed Hashim Alqarooni,Chong Yew Ng,Matthew Thorley,Harriet Conley,Jon Skinner,Cameron Bullock,Alexander Wijnberg,Christian Greer,Alan Eccles,Hannah Lewis,Sarath Vennam,Amina Odeh,Mo Babsail,Richard Chaytor,Sherafghan PROC,Madalina Drumea,Mark Fellows,Clement Leung +Rotation,,Exeter,Exeter,Exeter,Exeter,Exeter,Exeter,Exeter,Exeter,Exeter,Exeter,Exeter,Derriford,Derriford,Derriford,Derriford,Derriford,Derriford,Derriford,Derriford,Derriford,Derriford,Derriford,Derriford,Derriford,Derriford,Derriford,Derriford,Derriford,Derriford,Derriford Twilights,Torbay,Torbay,Torbay,Torbay,Torbay,Torbay,Torbay,Torbay,Torbay,Torbay Twilights,Truro,Truro,Truro,Truro,Truro,Truro,Truro,Truro,Truro,Truro no PROC,Barnstaple,Taunton,Taunton +Grade,,ST2,ST2,ST2,ST3,ST3,ST3,ST3,ST4,ST4,ST5,ST5,ST2,ST2,ST2,ST2,ST3,ST3,ST3,ST3,ST3,ST4,ST4,ST4,ST4,ST4,ST5,ST5,ST5,ST5,ST6,ST2,ST2,ST2,ST2,ST3,ST4,ST4,ST4,ST5,ST6,ST2,ST2,ST3,ST3,ST3,ST4,ST4,ST5,ST5,ST5 (until dec),ST3,ST2,ST4 +PROC site,,Derriford,,exeter,Torbay,Exeter,,Derriford,Derriford,Exeter,Exeter,Derriford,Derriford,torbay,Torbay,derriford,,derriford,exeter,,Exeter,,,derriford,Derriford,,derriford,Derriford,Derriford,Exeter,NA,derriford,Torbay,Derriford,Derriford,,torbay,Derriford,Derriford,Torbay,NA,Exeter,Derriford,Truro,Truro,Derriford,Truro,Truro,Derriford,derriford,Derriford,Barnstaple,NA,NA +%FTE,,100,0,100,100,100,60,100,100,100,100,80,100,100,100,100,100,60,80,100,100,0,80,100,100,60,100,100,80,100,60,100,100,100,100,100,100,100,100,60,100,100,100,100,80,100,100,100,100,100,100,80,0,0 +NWD,,,,,,,"Thursday,Friday",,"Tuesday,Thursday",,,wednesday,,,,,,"Wednesday,thursday",Wednesday,,,,Friday,,,"thursday, friday",,,Friday,,"monday,friday",,"thursday, friday",,,,,,,"monday,thursday",,,,,"wednesday, thursday,Friday",,,,,,,,, +Flexible NWD,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +End Date,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +OOP,,,,,,,6/9/21-31/3/22,,,,,,,,,,,,,,,,,,,6/9/21-2/5/22,,,1/1/22-5/9/22,6/9/21-28/2/22,,,,,,,,,,6/9/21-20/9/21,,,,,,,,,,,,,, +Group,,Y1G1,Y1G1,Y1G2,Y3G1,Y3G1,Y3G2,Y3G2,,,,,Y2G1,Y2G2,Y2G2,Y2G2,Y3G1,Y3G1,Y3G2,Y3G2,Y3G2,,,,,,,,,,,Y2G1,Y2G1,Y2G2,Y2G2,Y3G2,,,,,,Y2G1,Y2G2,Y3G1,Y3G1,Y3G2,,,,,,,Y2G1, +?PROC,,,,,,,,,,,,,,,,,,,,,,NO,,,,WEEKEND ONLY,,,,,No,,,,,,,,,,No,,,,,,,,,,Yes - until ST6 in dec,???,NO,NO +Pair,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,2,,, +Extra_night_weekend,,3.72,,-0.28,-0.28,-0.28,,-0.28,-0.28,-0.28,-0.28,0.63,-0.28,-0.28,-0.28,-0.28,-0.28,4.63,2.17,-0.28,3.72,,2.17,-0.28,-0.28,,-0.28,-0.28,,0.3,0,-0.28,-0.28,-0.28,3.72,-0.28,-0.28,-1.06,-0.28,0.27,,-0.28,-0.28,-0.28,-1.83,-0.28,-0.28,-0.28,-0.28,-0.28,0,7.72,, +Extra_night_weekday,,-0.21,,-0.21,-0.21,-0.21,,-0.21,-0.21,-0.21,-0.21,0.47,-0.21,2.79,2.79,2.79,-0.21,-2.53,-1.37,-0.21,-0.21,,-1.37,-0.21,-0.21,,-0.21,-0.21,,0.22,0,-0.21,-0.21,-0.21,-0.21,-0.21,-0.21,2.21,-0.21,0.21,,-0.21,-0.21,-0.21,1.63,-0.21,-0.21,-0.21,-0.21,-0.21,0,5.79,, +Extra_twilight,,-1.97,,-0.97,1.03,1.03,,-0.97,-1.97,1.03,1.03,-0.38,0.47,0.47,-1.53,0.47,-0.53,-3.92,-2.23,0.47,-2.53,,-2.23,0.47,0.47,,0.47,0.47,,0.33,0.08,1.95,-0.05,1.95,-1.05,1.95,1.95,1.56,3.95,1.73,,-1.39,-1.39,0.61,0.49,-1.39,-0.39,1.61,2.61,-1.39,0.61,0,, +Extra_weekend,,-0.73,,2.27,-0.73,-0.73,,2.27,2.27,-0.73,-0.73,-1.04,,,,,,,,,,,,,,,,,,,,1.46,3.46,1.46,0.46,1.46,1.46,0.42,0.46,-0.2,,1.96,-1.04,-1.04,-0.63,1.96,0.96,-1.04,-2.04,1.96,-1.04,0,, +Extra_weekend_plymouth1,,,,,,,,,,,,,-2.22,-0.22,-2.22,-0.22,-0.22,2.27,-0.98,-2.22,-0.22,,1.02,1.78,-0.22,,1.78,1.78,,0.15,0,,,,,,,,,,,,,,,,,,,,,,, +Extra_weekend_plymouth2,,,,,,,,,,,,,1.78,-2.22,1.78,-2.22,-0.22,0.27,3.02,1.78,-0.22,,1.02,-2.22,-0.22,,-2.22,-0.22,,0.15,0,,,,,,,,,,,,,,,,,,,,,,, +Extra_plymouth_bank_holiday,,,,,,,,,,,,,0.2,0.2,0.2,0.2,0.2,0.12,-0.84,0.2,0.2,,0.16,0.2,0.2,,0.2,-1.8,,0.01,0.12,,,,,,,,,,,,,,,,,,,,,,, +bank_holidays_worked,,,,1,,,,1,,2,1,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,2,1,2,,2,1,,3,,,,,,2,2,,,,2,,2,,1,,1,2,,,,2,2,,,,2,,,1,,, +Date,Exams,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +6/9/21,,,NO ONCALL,,,POST ONCALL,Mat leave,,exeter_twilight,,exeter_twilight,,,A/L,,,,,A/L,,,No Oncall,POST ONCALL,POST ONCALL,POST ONCALL,Mat leave,,,plymouth_twilight,OOPT,NO oncals,,POST ONCALL,,,,A/L,torbay_twilight,torbay_twilight,Mat leave,POST ONCALL,,,,,truro_twilight,truro_twilight,,A/L,POST ONCALL,,,, +7/9/21,,,NO ONCALL,,,POST ONCALL,Mat leave,,exeter_twilight,,exeter_twilight,,,A/L,,,,,A/L,,,No Oncall,POST ONCALL,POST ONCALL,POST ONCALL,Mat leave,,,plymouth_twilight,OOPT,NO oncals,,POST ONCALL,,,,A/L,torbay_twilight,torbay_twilight,Mat leave,POST ONCALL,,,,,truro_twilight,truro_twilight,,A/L,POST ONCALL,,,, +8/9/21,,,NO ONCALL,,,,Mat leave,,2b course,2b course,,,,,,,,,A/L,,,No Oncall,2b course,2b course,,Mat leave,,2b course,,OOPT,NO oncals,,,,,,A/L,2b course,2b course,Mat leave,,,,,,,2b course,2b course,A/L,,,,, +9/9/21,,,NO ONCALL,,,,Mat leave,,2b course,2b course,,,,,,,,,A/L,,,No Oncall,2b course,2b course,,Mat leave,,2b course,,OOPT,NO oncals,,,,,,A/L,2b course,2b course,Mat leave,,,,,,,2b course,2b course,A/L,,,,, +10/9/21,,,NO ONCALL,,A/L,,Mat leave,,,,,,,,,,,,A/L,,,No Oncall,,,,Mat leave,,,A/L,OOPT,NO oncals,,,,,,,,,Mat leave,,,,,,,,,A/L,,,,, +11/9/21,,,NO ONCALL,,A/L,,Mat leave,,,,,,,,,,,,A/L,,,No Oncall,,,,Mat leave,,,A/L,OOPT,NO oncals,,,,,,,,,Mat leave,,,,,,,,,A/L,,,,, +12/9/21,,,NO ONCALL,,A/L,,Mat leave,,,,,,,,,,,,A/L,,,No Oncall,,,,Mat leave,,,A/L,OOPT,NO oncals,,,,,,,,,Mat leave,,,,,,,,,A/L,,,,, +13/9/21,,,NO ONCALL,,A/L,,Mat leave,,,,,,,,,,,,A/L,,,No Oncall,,,,Mat leave,,,A/L,OOPT,NO oncals,,,,,,,,,Mat leave,,,,,,,,,,,,,, +14/9/21,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,A/L,,,No Oncall,,,,Mat leave,,,,OOPT,NO oncals,,,,,,,,,Mat leave,,,,,,,,,,,,,, +15/9/21,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,A/L,,,No Oncall,,,,Mat leave,,,,OOPT,NO oncals,,,,,,,,,Mat leave,,,,,,,,,,,,,, +16/9/21,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,A/L,,,No Oncall,,,,Mat leave,,,,OOPT,NO oncals,,,,,,,,,Mat leave,,,,,,,,,,,,,, +17/9/21,Pre 2B,,NO ONCALL,,,,Mat leave,,Pre 2B,Pre 2B,A/L,Pre 2B,,,,,,,A/L,,,No Oncall,,Pre 2B,,Mat leave,,,,OOPT,NO oncals,,,,,,Pre 2B,Pre 2B,Pre 2B,Mat leave,,,,,Pre 2B,,Pre 2B,Pre 2B,,,,,, +18/9/21,Pre 2B,,NO ONCALL,,,,Mat leave,,Pre 2B,Pre 2B,A/L,Pre 2B,,,,,,,,,,No Oncall,,Pre 2B,,Mat leave,,,,OOPT,NO oncals,,,,,,Pre 2B,Pre 2B,Pre 2B,Mat leave,,,,,Pre 2B,,Pre 2B,Pre 2B,,,,,, +19/9/21,Pre 2B,,NO ONCALL,,,,Mat leave,,Pre 2B,Pre 2B,A/L,Pre 2B,,,,,,,,,,No Oncall,,Pre 2B,,Mat leave,,,,OOPT,NO oncals,,,,,,Pre 2B,Pre 2B,Pre 2B,Mat leave,,,,,Pre 2B,,Pre 2B,Pre 2B,,,,,, +20/9/21,Pre 2B,,NO ONCALL,,,,Mat leave,,Pre 2B,Pre 2B,A/L,Pre 2B,,,,,,,,,,No Oncall,,Pre 2B,,Mat leave,,,,OOPT,NO oncals,,,,,,Pre 2B,Pre 2B,Pre 2B,Mat leave,,,,,Pre 2B,,Pre 2B,Pre 2B,,,,,, +21/9/21,Pre 2B,,NO ONCALL,,,,Mat leave,,Pre 2B,Pre 2B,,Pre 2B,,,,,,,,,,No Oncall,,Pre 2B,,Mat leave,,,,OOPT,NO oncals,,,,,,Pre 2B,Pre 2B,Pre 2B,No nights,,,,,Pre 2B,,Pre 2B,Pre 2B,,,,,, +22/9/21,Pre 2B,,NO ONCALL,,,,Mat leave,,Pre 2B,Pre 2B,,Pre 2B,,,,,,,,,,No Oncall,,Pre 2B,,Mat leave,,,,OOPT,NO oncals,,,,,,Pre 2B,Pre 2B,Pre 2B,No nights,,,,,Pre 2B,,Pre 2B,Pre 2B,,,,,, +23/9/21,Pre 2B,,NO ONCALL,,,,Mat leave,,Pre 2B,Pre 2B,,Pre 2B,,,,,,,,,,No Oncall,,Pre 2B,,Mat leave,,,,OOPT,NO oncals,,A/L,,,,Pre 2B,Pre 2B,Pre 2B,No nights,,,,,Pre 2B,,Pre 2B,Pre 2B,,,,,, +24/9/21,Pre 2B,,NO ONCALL,,,,Mat leave,,Pre 2B,Pre 2B,,Pre 2B,,,,,,,,,,No Oncall,,Pre 2B,,Mat leave,,,,OOPT,NO oncals,,A/L,,,,Pre 2B,Pre 2B,Pre 2B,A/L,,,,,Pre 2B,,Pre 2B,Pre 2B,,,,,, +25/9/21,Pre 2B,,NO ONCALL,,,,Mat leave,,Pre 2B,Pre 2B,,Pre 2B,,,,,,,,,,No Oncall,,Pre 2B,,Mat leave,,,,OOPT,NO oncals,,A/L,,,,Pre 2B,Pre 2B,Pre 2B,A/L,,,,,Pre 2B,,Pre 2B,Pre 2B,,,,,, +26/9/21,Pre 2B,,NO ONCALL,,,,Mat leave,,Pre 2B,Pre 2B,,Pre 2B,,,,,,,,,,No Oncall,,Pre 2B,,Mat leave,,,,OOPT,NO oncals,,A/L,,,,Pre 2B,Pre 2B,Pre 2B,A/L,,,,,Pre 2B,,Pre 2B,Pre 2B,,,,,, +27/9/21,Pre 2B,,NO ONCALL,,,,Mat leave,,Pre 2B,Pre 2B,,Pre 2B,,,,,,,,,,No Oncall,,Pre 2B,,Mat leave,,,,OOPT,,,,,,,Pre 2B,Pre 2B,Pre 2B,No nights,,,,,Pre 2B,,Pre 2B,Pre 2B,,,,,, +28/9/21,Pre 2B,,NO ONCALL,,,,Mat leave,,Pre 2B,Pre 2B,,Pre 2B,,,,,,,,,,No Oncall,,Pre 2B,,Mat leave,,,,OOPT,,,,,,,Pre 2B,Pre 2B,Pre 2B,No nights,,,,,Pre 2B,,Pre 2B,Pre 2B,,,,,, +29/9/21,Pre 2B,,NO ONCALL,,,,Mat leave,,Pre 2B,Pre 2B,,Pre 2B,,,,,,,,,,No Oncall,,Pre 2B,,Mat leave,,,,OOPT,,,,,,,Pre 2B,Pre 2B,Pre 2B,No nights,,,,,Pre 2B,,Pre 2B,Pre 2B,,,,,, +30/9/21,Pre 2B,,NO ONCALL,,,,Mat leave,,Pre 2B,Pre 2B,,Pre 2B,,,,,,,,,,No Oncall,,Pre 2B,,Mat leave,,,,OOPT,,,,,,,Pre 2B,Pre 2B,Pre 2B,No nights,,,,,Pre 2B,,Pre 2B,Pre 2B,,,,,, +1/10/21,2B,,NO ONCALL,,,,Mat leave,,2B,2B,A/L,2B,A/L,,,,,,,,,No Oncall,,2B,,Mat leave,,,,OOPT,,,,,,,2B,2B,2B,No nights,,,,,2B,,2B,2B,,,,,, +2/10/21,2B,,NO ONCALL,,,,Mat leave,,2B,2B,A/L,2B,A/L,,,,,,,,,No Oncall,,2B,,Mat leave,,,,OOPT,,,,,,,2B,2B,2B,No nights,,,,,2B,,2B,2B,,,,,, +3/10/21,2B,,NO ONCALL,,,,Mat leave,,2B,2B,A/L,2B,A/L,,,,,,,,,No Oncall,,2B,,Mat leave,,,,OOPT,,,,,,,2B,2B,2B,No nights,,,,,2B,,2B,2B,,,,,, +4/10/21,2B,,NO ONCALL,,,,Mat leave,,2B,2B,A/L,2B,,,,,,,,,,No Oncall,,2B,,Mat leave,,,,OOPT,,,,,,,2B,2B,2B,No nights,,,,,2B,,2B,2B,,,,,, +5/10/21,2B,,NO ONCALL,,,,Mat leave,,2B,2B,,2B,,,,,,,,,,No Oncall,,2B,,Mat leave,,,,OOPT,,,,,,,2B,2B,2B,No nights,,,,,2B,,2B,2B,,,,,, +6/10/21,2B,,NO ONCALL,,,,Mat leave,,2B,2B,,2B,,,,,,,,,,No Oncall,,2B,,Mat leave,,,,OOPT,,,,,,,2B,2B,2B,No nights,,,,,2B,,2B,2B,,,,,, +7/10/21,2B,,NO ONCALL,,,,Mat leave,,2B,2B,,2B,,,,,,,,,,No Oncall,,2B,,Mat leave,,,,OOPT,,,,,,,2B,2B,2B,No nights,,,,,2B,,2B,2B,,,,,, +8/10/21,2B,,NO ONCALL,,,,Mat leave,,2B,2B,,2B,,,,,,,,,,No Oncall,,2B,,Mat leave,,,A/L,OOPT,,,,,,,2B,2B,2B,No nights,,,,,2B,,2B,2B,,,,,, +9/10/21,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,A/L,OOPT,,,,,,,,,,No nights,,,,,,,,,,,,,, +10/10/21,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,A/L,OOPT,,,,,,,,,,No nights,,,,,,,,,,,,,, +11/10/21,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,A/L,OOPT,,,,,,,,,,No nights,,,,,,,,,,,,,, +12/10/21,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,,,,,,,No nights,,,,,,,,,,,,,, +13/10/21,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,,,,,,,No nights,,,,,,,,,,,,,, +14/10/21,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,,,,,,,No nights,,,,,,,,,,,,,, +15/10/21,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,,,,,,,No nights,,,,,,,,,,,,,, +16/10/21,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,,,,,,,No nights,,,,,,,,,,,,,, +17/10/21,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,,,,,,,No nights,,,,,,,,,,,,,, +18/10/21,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,,,,,,,No nights,,,,,,,,,,,,,, +19/10/21,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,,,,,,,No nights,,,,,,,,,,,,,, +20/10/21,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,,,,,,,No nights,,,,,,,,,,,,,, +21/10/21,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,,,,,,,No nights,,,,,,,,,,,,,, +22/10/21,,,NO ONCALL,,,,Mat leave,,A/L,,A/L,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,,,A/L,,,,No nights,,,,,,A/L,,,,,,,, +23/10/21,,,NO ONCALL,,,,Mat leave,,A/L,,A/L,,,A/L,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,A/L,,,,,A/L,A/L,,,,,,,,,A/L,,,,,,,, +24/10/21,,,NO ONCALL,,,,Mat leave,,A/L,,A/L,,,A/L,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,A/L,,,,,A/L,A/L,,,,,,,,,A/L,,,,,,,, +25/10/21,,,NO ONCALL,,,,Mat leave,,A/L,,A/L,,,A/L,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,A/L,,,,,,A/L,,,,,,,,,,,,,,,,, +26/10/21,,,NO ONCALL,,,,Mat leave,,,,A/L,,,A/L,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,A/L,,,,,,A/L,,,,,,,,,,,,,,,,, +27/10/21,,,NO ONCALL,,,,Mat leave,,,,A/L,,,A/L,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,A/L,,,,,,A/L,,,,,,,,,,,,,,,,, +28/10/21,,,NO ONCALL,,,,Mat leave,,,,A/L,,,A/L,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,A/L,,,,,,A/L,,,,,,,,,,,,,,,,, +29/10/21,,,NO ONCALL,,,,Mat leave,,,,A/L,,,A/L,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,A/L,,,,,,A/L,,,,,,,,,,,,,,,,, +30/10/21,,,NO ONCALL,,,A/L,Mat leave,,,,A/L,,,A/L,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,A/L,,A/L,,,,A/L,,,,,,,,,,,,,,,,, +31/10/21,,,NO ONCALL,,,A/L,Mat leave,,,,A/L,,,A/L,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,A/L,,A/L,,,,A/L,,,,,,,,,,,,,,,,, +1/11/21,Pre 2a,,NO ONCALL,,Pre 2a,Pre 2a,Mat leave,Pre 2a,,Pre 2a,,,,,,,Pre 2a,Pre 2a,Pre 2a,Pre 2a,Pre 2a,No Oncall,Pre 2a,Pre 2a,,Mat leave,,,,OOPT,,,Pre 2a,,,Pre 2a,,Pre 2a,,,,,,Pre 2a,,Pre 2a,Pre 2a,,,,,Pre 2a,,Pre 2a +2/11/21,Pre 2a,,NO ONCALL,,Pre 2a,Pre 2a,Mat leave,Pre 2a,,Pre 2a,,,,,,,Pre 2a,Pre 2a,Pre 2a,Pre 2a,Pre 2a,No Oncall,Pre 2a,Pre 2a,,Mat leave,,,,OOPT,,,Pre 2a,,,Pre 2a,,Pre 2a,,,,,,Pre 2a,,Pre 2a,Pre 2a,,,,,Pre 2a,,Pre 2a +3/11/21,Pre 2a,,NO ONCALL,,Pre 2a,Pre 2a,Mat leave,Pre 2a,,Pre 2a,,,,,,,Pre 2a,Pre 2a,Pre 2a,Pre 2a,Pre 2a,No Oncall,Pre 2a,Pre 2a,,Mat leave,,,,OOPT,,,Pre 2a,,,Pre 2a,,Pre 2a,,,,,,Pre 2a,,Pre 2a,Pre 2a,,A/L,,,Pre 2a,,Pre 2a +4/11/21,Pre 2a,,NO ONCALL,,Pre 2a,Pre 2a,Mat leave,Pre 2a,,Pre 2a,,,,,,,Pre 2a,Pre 2a,Pre 2a,Pre 2a,Pre 2a,No Oncall,Pre 2a,Pre 2a,,Mat leave,,,,OOPT,,,Pre 2a,,,Pre 2a,,Pre 2a,,,,,,Pre 2a,,Pre 2a,Pre 2a,,A/L,,,Pre 2a,,Pre 2a +5/11/21,Pre 2a,,NO ONCALL,,Pre 2a,Pre 2a,Mat leave,Pre 2a,,Pre 2a,,,,,,,Pre 2a,Pre 2a,Pre 2a,Pre 2a,Pre 2a,No Oncall,Pre 2a,Pre 2a,,Mat leave,,,A/L,OOPT,,,Pre 2a,,,Pre 2a,,Pre 2a,,,,,,Pre 2a,,Pre 2a,Pre 2a,,A/L,,,Pre 2a,,Pre 2a +6/11/21,Pre 2a,,NO ONCALL,,Pre 2a,Pre 2a,Mat leave,Pre 2a,,Pre 2a,,,,,,,Pre 2a,Pre 2a,Pre 2a,Pre 2a,Pre 2a,No Oncall,Pre 2a,Pre 2a,,Mat leave,,,A/L,OOPT,,,Pre 2a,,,Pre 2a,,Pre 2a,,,,,,Pre 2a,,Pre 2a,Pre 2a,,A/L,,,Pre 2a,,Pre 2a +7/11/21,Pre 2a,,NO ONCALL,,Pre 2a,Pre 2a,Mat leave,Pre 2a,,Pre 2a,,,,,,,Pre 2a,Pre 2a,Pre 2a,Pre 2a,Pre 2a,No Oncall,Pre 2a,Pre 2a,,Mat leave,,,A/L,OOPT,,,Pre 2a,,,Pre 2a,,Pre 2a,,,,,,Pre 2a,,Pre 2a,Pre 2a,,A/L,,,Pre 2a,,Pre 2a +8/11/21,Pre 2a,,NO ONCALL,,Pre 2a,Pre 2a,Mat leave,Pre 2a,,Pre 2a,,,,,,,Pre 2a,Pre 2a,Pre 2a,Pre 2a,Pre 2a,No Oncall,Pre 2a,Pre 2a,,Mat leave,,,,OOPT,,,Pre 2a,,,Pre 2a,,Pre 2a,,,,,,Pre 2a,,Pre 2a,Pre 2a,,,,,Pre 2a,,Pre 2a +9/11/21,Pre 2a,,NO ONCALL,,Pre 2a,Pre 2a,Mat leave,Pre 2a,,Pre 2a,,,,,,,Pre 2a,Pre 2a,Pre 2a,Pre 2a,Pre 2a,No Oncall,Pre 2a,Pre 2a,,Mat leave,,,,OOPT,,,Pre 2a,,,Pre 2a,,Pre 2a,,,,,,Pre 2a,,Pre 2a,Pre 2a,,,,,Pre 2a,,Pre 2a +10/11/21,Pre 2a,,NO ONCALL,,Pre 2a,Pre 2a,Mat leave,Pre 2a,,Pre 2a,,,,,,,Pre 2a,Pre 2a,Pre 2a,Pre 2a,Pre 2a,No Oncall,Pre 2a,Pre 2a,,Mat leave,,,,OOPT,,,Pre 2a,,,Pre 2a,,Pre 2a,,,,,,Pre 2a,,Pre 2a,Pre 2a,,A/L,,,Pre 2a,,Pre 2a +11/11/21,Pre 2a,,NO ONCALL,,Pre 2a,Pre 2a,Mat leave,Pre 2a,,Pre 2a,,,,,,,Pre 2a,Pre 2a,Pre 2a,Pre 2a,Pre 2a,No Oncall,Pre 2a,Pre 2a,,Mat leave,,,,OOPT,,,Pre 2a,,,Pre 2a,,Pre 2a,,,,,,Pre 2a,,Pre 2a,Pre 2a,,A/L,,,Pre 2a,,Pre 2a +12/11/21,Pre 2a,,NO ONCALL,,Pre 2a,Pre 2a,Mat leave,Pre 2a,,Pre 2a,,,,,,,Pre 2a,Pre 2a,Pre 2a,Pre 2a,Pre 2a,No Oncall,Pre 2a,Pre 2a,,Mat leave,,,,OOPT,,,Pre 2a,,,Pre 2a,,Pre 2a,,,,,,Pre 2a,,Pre 2a,Pre 2a,,A/L,,,Pre 2a,,Pre 2a +13/11/21,Pre 2a,,NO ONCALL,,Pre 2a,Pre 2a,Mat leave,Pre 2a,,Pre 2a,,,,,,,Pre 2a,Pre 2a,Pre 2a,Pre 2a,Pre 2a,No Oncall,Pre 2a,Pre 2a,,Mat leave,,,,OOPT,,A/L,Pre 2a,,,Pre 2a,,Pre 2a,,,,,,Pre 2a,,Pre 2a,Pre 2a,,A/L,,,Pre 2a,,Pre 2a +14/11/21,Pre 2a,,NO ONCALL,,Pre 2a,Pre 2a,Mat leave,Pre 2a,,Pre 2a,,,,,,,Pre 2a,Pre 2a,Pre 2a,Pre 2a,Pre 2a,No Oncall,Pre 2a,Pre 2a,,Mat leave,,,,OOPT,,A/L,Pre 2a,,,Pre 2a,,Pre 2a,,,,,,Pre 2a,,Pre 2a,Pre 2a,,A/L,,,Pre 2a,,Pre 2a +15/11/21,Pre 2a,,NO ONCALL,,Pre 2a,Pre 2a,Mat leave,Pre 2a,,Pre 2a,,,,,,,Pre 2a,Pre 2a,Pre 2a,Pre 2a,Pre 2a,No Oncall,Pre 2a,Pre 2a,,Mat leave,,,,OOPT,,A/L,Pre 2a,,,Pre 2a,,Pre 2a,,,,,,Pre 2a,,Pre 2a,Pre 2a,,,,,Pre 2a,,Pre 2a +16/11/21,Pre 2a,,NO ONCALL,,Pre 2a,Pre 2a,Mat leave,Pre 2a,,Pre 2a,,,,,,,Pre 2a,Pre 2a,Pre 2a,Pre 2a,Pre 2a,No Oncall,Pre 2a,Pre 2a,,Mat leave,,,,OOPT,,A/L,Pre 2a,,,Pre 2a,,Pre 2a,,,,,,Pre 2a,,Pre 2a,Pre 2a,,,,,Pre 2a,,Pre 2a +17/11/21,2A,,NO ONCALL,,2A,2A,Mat leave,2A,,2A,,,,,,,2A,2A,2A,2A,2A,No Oncall,2A,2A,,Mat leave,,,,OOPT,,A/L,2A,,,2A,,2A,,,,,,2A,,2A,2A,,,,,2A,,2A +18/11/21,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,A/L,,,,A/L,,,,,,,,,,A/L,,,,,,,, +19/11/21,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,A/L,,,,A/L,,,,,,,,,,A/L,,,,,,,, +20/11/21,,,NO ONCALL,,,A/L,Mat leave,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,A/L,,,,A/L,,,,,,,,,,A/L,,,A/L,,,,, +21/11/21,,,NO ONCALL,,,A/L,Mat leave,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,A/L,,,,A/L,,,,,,,,,,A/L,,,A/L,,,,, +22/11/21,,,NO ONCALL,,,A/L,Mat leave,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,A/L,,,,A/L,,,,,,,,,,A/L,,,A/L,,,,, +23/11/21,,,NO ONCALL,,,A/L,Mat leave,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,A/L,,,,A/L,,,,,,,,,,A/L,,,A/L,,,,, +24/11/21,,,NO ONCALL,,,A/L,Mat leave,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,A/L,,,,A/L,,,,,,,,,,A/L,,,A/L,,,,, +25/11/21,,,NO ONCALL,,,A/L,Mat leave,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,A/L,,,,A/L,,,,,,,,,,A/L,,,A/L,,,,, +26/11/21,,,NO ONCALL,,,A/L,Mat leave,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,A/L,,,,A/L,,,,,,,,,,A/L,,,A/L,,,,, +27/11/21,,,NO ONCALL,,,A/L,Mat leave,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,A/L,,,,A/L,,,,,,,,,,A/L,,,A/L,,,,, +28/11/21,,,NO ONCALL,,,A/L,Mat leave,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,A/L,,,,A/L,,,,,,,,,,A/L,,,A/L,,,,, +29/11/21,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,,,A/L,,,,,,,,,,A/L,,,A/L,,,,, +30/11/21,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,,,A/L,,,,,,,,,,A/L,,,A/L,,,,, +1/12/21,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,,,A/L,,,,,,,,,,A/L,,,A/L,,,,, +2/12/21,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,,,A/L,,,,,,,,,,A/L,,,A/L,,,,, +3/12/21,,,NO ONCALL,,,,Mat leave,,,,,,,,,,OFF,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,,,A/L,,,,,,,,,,A/L,,,A/L,,,,, +4/12/21,,,NO ONCALL,,,,Mat leave,,,,,,,,,,OFF,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,,,,,,,,,,,,,A/L,,,A/L,,,,, +5/12/21,,,NO ONCALL,,,,Mat leave,,,,,,,,,,OFF,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,,,,,,,,,,,,,A/L,,,A/L,,,,, +6/12/21,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,, +7/12/21,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,, +8/12/21,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,, +9/12/21,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,,,,,,,,,,,,,,,,,A/L,,,, +10/12/21,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,,,,,,,,,,,,,,,,,A/L,,,, +11/12/21,,,NO ONCALL,,,,Mat leave,,A/L,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,A/L,,,,,,,,,,,,,,,,A/L,,,, +12/12/21,,,NO ONCALL,,,,Mat leave,,A/L,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,A/L,,,,,,,,,,,,,,,,A/L,,,, +13/12/21,,,NO ONCALL,,,,Mat leave,,A/L,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,A/L,,,,,,,,,,,,,,,,,,,, +14/12/21,,,NO ONCALL,,,,Mat leave,,A/L,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,A/L,,,,,,,,,,,,,,,,,,,, +15/12/21,,,NO ONCALL,,,,Mat leave,,A/L,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,A/L,,,,,,,,,,,,,,,,,,,, +16/12/21,,,NO ONCALL,,,,Mat leave,,A/L,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,A/L,,,,,,,,,,,,,,,,,,,, +17/12/21,,,NO ONCALL,,,,Mat leave,,A/L,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,A/L,OOPT,,,,A/L,,,,,,,,,,,,,,,,,,,, +18/12/21,,,NO ONCALL,,,,Mat leave,,A/L,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,A/L,OOPT,,,,,,,,,,,,,,,,,,,,,,,,A/L +19/12/21,,,NO ONCALL,,,,Mat leave,,A/L,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,A/L,OOPT,,,,,,,,,,,,,,,,,,,,,,,,A/L +20/12/21,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,A/L +21/12/21,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,A/L +22/12/21,,,NO ONCALL,,,,Mat leave,,,,,,A/L,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,A/L +23/12/21,,,NO ONCALL,,OFF,,Mat leave,,,,,,A/L,,,,,,,OFF,,No Oncall,,,,Mat leave,,,,OOPT,,,,,,OFF,OFF,OFF,,,,,,,,OFF,OFF,,OFF,,,OFF,,A/L +24/12/21,,,NO ONCALL,,OFF,,Mat leave,,,,,,A/L,,,,,,,OFF,,No Oncall,,,,Mat leave,,,,OOPT,,,,,,OFF,OFF,OFF,,,,,,,,OFF,OFF,,OFF,,,OFF,,A/L +25/12/21,,,NO ONCALL,,OFF,,Mat leave,,,,,,A/L,,,,,,,OFF,,No Oncall,,,,Mat leave,,,,OOPT,,,,,,OFF,OFF,OFF,,,,,,,,OFF,OFF,,OFF,,,OFF,,A/L +26/12/21,,,NO ONCALL,,OFF,,Mat leave,,,,,,A/L,,,,,,,OFF,,No Oncall,,,,Mat leave,,,,OOPT,,,,,,OFF,OFF,OFF,,,,,,,,OFF,OFF,,OFF,,,OFF,,A/L +27/12/21,,,NO ONCALL,,OFF,,Mat leave,,,,,,A/L,,,,,,,OFF,,No Oncall,,,,Mat leave,,,,OOPT,,,,,,OFF,OFF,OFF,,,,,,,,OFF,OFF,,OFF,,,OFF,,A/L +28/12/21,,,NO ONCALL,,,,Mat leave,,,,,,A/L,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,,,,OFF,,,,,,,,,,,,,,,,,A/L +29/12/21,,,NO ONCALL,,,,Mat leave,,,,,,A/L,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,,,,OFF,,,,,,,,,,,,,,,,,A/L +30/12/21,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,,,,OFF,,,,,,,,,,,,,,,,,A/L +31/12/21,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,,,,OFF,,,,,,,,,,,,,,,,,A/L +1/1/22,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,OOPT,,,,,,,OFF,,,,,,,,,,,,,,,,,A/L +2/1/22,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,OOPT,,,,,,,OFF,,,,,,,,,,,,,,,,,A/L +3/1/22,,,NO ONCALL,,,,Mat leave,,,,,,,A/L,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,OOPT,,,A/L,,,,OFF,,,,,,,,,,,,,,,,,A/L +4/1/22,,,NO ONCALL,,,,Mat leave,,,,,,,A/L,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,OOPT,,,A/L,,,,OFF,,,,,,,,,,,,,,,,,A/L +5/1/22,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,OOPT,,,A/L,,,,,,,,,,,,,,,,,,,,,A/L +6/1/22,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,OOPT,,,A/L,,,,,,,,,,,,,,,,,,,,,A/L +7/1/22,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,OOPT,,,A/L,,,,,,,,,,,,,,,,,,,,,A/L +8/1/22,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,OOPT,,,A/L,,,,,,,,,,,,,,,,A/L,,,,,A/L +9/1/22,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,OOPT,,,A/L,,,,,,,,,,,,,,,,A/L,,,,,A/L +10/1/22,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,OOPT,,,,,,,,,,,,,,,,,,,A/L,,,,, +11/1/22,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,OOPT,,,,,,,,,,,,,,,,,,,A/L,,,,, +12/1/22,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,OOPT,,,,,,,,,,,,,,,,,,,A/L,,,,, +13/1/22,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,OOPT,,,,,,,,,,,,,,,,,,,A/L,,,,, +14/1/22,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,OOPT,,,,,,,,,,,,,,,,,,,A/L,,,,, +15/1/22,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,OOPT,,,,,,,,,,,,,,,,,,,A/L,,,,, +16/1/22,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,OOPT,,,,,,,,,,,,,,,,,,,A/L,,,,, +17/1/22,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,OOPT,,,,,,,,,,,,,,,,,,,,,,,, +18/1/22,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,OOPT,,,,,,,,,,,,,,,,,,,,,,,, +19/1/22,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,OOPT,,,,,,,,,,,,,,,,,,,,,,,, +20/1/22,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,OOPT,,,,,,,,,,,,,,,,,,,,,,,, +21/1/22,,,NO ONCALL,,A/L,,Mat leave,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,OOPT,,,,,,,,,,A/L,,,,,,,,,,,,,, +22/1/22,,,NO ONCALL,,A/L,,Mat leave,,A/L,,,,,,,,,,,,,No Oncall,,A/L,,Mat leave,,,OOPT,OOPT,,,,,,,,,,A/L,,,,,,,,,,,,,, +23/1/22,,,NO ONCALL,,A/L,,Mat leave,,A/L,,,,,,,,,,,,,No Oncall,,A/L,,Mat leave,,,OOPT,OOPT,,,,,,,,,,A/L,,,,,,,,,,,,,, +24/1/22,,,NO ONCALL,,A/L,,Mat leave,,A/L,,,,,,,,,,,,,No Oncall,,A/L,,Mat leave,,,OOPT,OOPT,,,,,,,,,,,,,,,,,,,,,,,, +25/1/22,,,NO ONCALL,,,,Mat leave,,A/L,,,,,,,,,,,,,No Oncall,,A/L,,Mat leave,,,OOPT,OOPT,,,,,,,,,,,,,,,,,,,,,,,, +26/1/22,,,NO ONCALL,,,,Mat leave,,A/L,,,,,,,,,,,,,No Oncall,,A/L,,Mat leave,,,OOPT,OOPT,,,,,,,,,,,,,,,,,,,,,,,, +27/1/22,,,NO ONCALL,,,,Mat leave,,A/L,,,,,,,,,,,,,No Oncall,,A/L,,Mat leave,,,OOPT,OOPT,,,,,,,,,,,,,,,,,,,,,,,, +28/1/22,,,NO ONCALL,,,,Mat leave,,A/L,,A/L,,,,,,,,,,,No Oncall,,A/L,,Mat leave,,,OOPT,OOPT,,,,,,,,,,,,,,,,,,,,,,,, +29/1/22,,,NO ONCALL,,,,Mat leave,,A/L,,A/L,,,,,,,,,,,No Oncall,,A/L,,Mat leave,,,OOPT,OOPT,,A/L,,,,,,,,,,,,,,,,,,,,,, +30/1/22,,,NO ONCALL,,,,Mat leave,,A/L,,A/L,,,,,,,,,,,No Oncall,,A/L,,Mat leave,,,OOPT,OOPT,,A/L,,,,,,,,,,,,,,,,,,,,,, +31/1/22,,,NO ONCALL,,,,Mat leave,,,,A/L,,,,,,,,,,,No Oncall,,A/L,,Mat leave,,,OOPT,OOPT,,A/L,,,,,,,,,,,,,,,,,,,,,, +1/2/22,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,No Oncall,,A/L,,Mat leave,,,OOPT,OOPT,,A/L,,,,,,,,,,,,,,,,,A/L,,,,, +2/2/22,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,No Oncall,,A/L,,Mat leave,,,OOPT,OOPT,,A/L,,,,,,,,,,,,,,A/L,,,A/L,,,,, +3/2/22,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,No Oncall,,A/L,,Mat leave,,,OOPT,OOPT,,A/L,,,,,,,,,,,,,,A/L,,,A/L,,,,, +4/2/22,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,No Oncall,,A/L,,Mat leave,,,OOPT,OOPT,,A/L,,,,,,,,,,,,,,A/L,,,A/L,,,,, +5/2/22,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,No Oncall,,A/L,,Mat leave,,,OOPT,OOPT,,A/L,,,,,,,,,,,,,,A/L,,,,A/L,,,, +6/2/22,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,No Oncall,,A/L,,Mat leave,,,OOPT,OOPT,,A/L,,,,,,,,,,,,,,A/L,,,,A/L,,,, +7/2/22,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,No Oncall,,A/L,,Mat leave,,,OOPT,OOPT,,A/L,,,,,,,,,,,,,,,,,,A/L,,,, +8/2/22,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,No Oncall,,A/L,,Mat leave,,,OOPT,OOPT,,A/L,,,,,,,,,,,,,,,,,,A/L,,,, +9/2/22,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,No Oncall,,A/L,,Mat leave,,,OOPT,OOPT,,A/L,,,,,,,,,,,,,,,,,,A/L,,,, +10/2/22,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,No Oncall,,A/L,,Mat leave,,,OOPT,OOPT,,A/L,,,,,,,,,,,,,,,,,,A/L,,,, +11/2/22,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,No Oncall,,A/L,,Mat leave,,,OOPT,OOPT,,A/L,,,,,,,,,,,,,,,,,,A/L,,,, +12/2/22,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,No Oncall,,A/L,,Mat leave,,,OOPT,OOPT,,A/L,,,,,,,,,,,,,,,,,,A/L,,,, +13/2/22,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,No Oncall,,A/L,,Mat leave,,,OOPT,OOPT,,A/L,,,,,,,,,,,,,,,,,,A/L,,,, +14/2/22,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,OOPT,,,,,,,,,,,,,,,,,,,,,,,, +15/2/22,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,OOPT,,,,,,,,,,,,,,,,,,,,,,,, +16/2/22,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,OOPT,,,,,,,,,,,,,,,,,,,,,,,, +17/2/22,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,OOPT,,,,,,,,,,,,,,,,,,,,,,,, +18/2/22,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,OOPT,,,,,,,,,,,,A/L,,A/L,,A/L,,,,,,,, +19/2/22,,,NO ONCALL,,,,Mat leave,,,,,,,A/L,,,,,,A/L,,No Oncall,,,,Mat leave,,,OOPT,OOPT,A/L,,,,,,A/L,,,,,A/L,,A/L,,A/L,,,,,,,, +20/2/22,,,NO ONCALL,,,,Mat leave,,,,,,,A/L,,,,,,A/L,,No Oncall,,,,Mat leave,,,OOPT,OOPT,A/L,,,,,,A/L,,,,,A/L,,A/L,,A/L,,,,,,,, +21/2/22,,,NO ONCALL,,,,Mat leave,,,,,,,A/L,,,,,,A/L,,No Oncall,,,,Mat leave,,,OOPT,OOPT,A/L,,,,,,A/L,,,,,,,A/L,,,,,,,,,, +22/2/22,,,NO ONCALL,,,,Mat leave,,,,,,,A/L,,,,,,A/L,,No Oncall,,,,Mat leave,,,OOPT,OOPT,A/L,,,,,,A/L,,,,,,,A/L,,,,,,,,,, +23/2/22,,,NO ONCALL,,,,Mat leave,,,,,,,A/L,,,,,,A/L,,No Oncall,,,,Mat leave,,,OOPT,OOPT,A/L,,,,,,A/L,,,,,,,A/L,,,,,,,,,, +24/2/22,,,NO ONCALL,,,,Mat leave,,,,,,,A/L,,,,,,A/L,,No Oncall,,,,Mat leave,,,OOPT,OOPT,A/L,,,,,,A/L,,,,,,,A/L,,,,,,,,,, +25/2/22,,,NO ONCALL,,,,Mat leave,,,,,,,A/L,,,,,,A/L,,No Oncall,,,,Mat leave,,,OOPT,OOPT,A/L,,,,,,A/L,,,,,,,,,,,,A/L,,,,, +26/2/22,,,NO ONCALL,,,,Mat leave,,,,,,,A/L,,,,,,A/L,,No Oncall,,,,Mat leave,,,OOPT,OOPT,A/L,,,,,,A/L,,,,,,,,,,,,A/L,,,,, +27/2/22,,,NO ONCALL,,,,Mat leave,,,,,,,A/L,,,,,,A/L,,No Oncall,,,,Mat leave,,,OOPT,OOPT,A/L,,,,,,A/L,,,,,,,,,,,,A/L,,,,, +28/2/22,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,A/L,,No Oncall,,,,Mat leave,,,OOPT,OOPT,,,,,,,,,,,,,,,,,,,A/L,,,,, +1/3/22,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,A/L,,No Oncall,,,,Mat leave,,,OOPT,,,,OOPC,,,,,,,,,,,,,,,A/L,A/L,,,,, +2/3/22,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,A/L,,No Oncall,,,,Mat leave,,,OOPT,,,,OOPC,A/L,,,,,,,,,,,,,,A/L,A/L,,,,, +3/3/22,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,A/L,,No Oncall,,,,Mat leave,,,OOPT,,,,OOPC,A/L,,,,,,A/L,,,,,,,,A/L,A/L,,,,, +4/3/22,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,A/L,,No Oncall,,,,Mat leave,,,OOPT,,,,OOPC,A/L,,,,,,,,,,,,,,A/L,A/L,,,,, +5/3/22,,,NO ONCALL,,,,Mat leave,,,,OOPT,,,,,,,,,A/L,,No Oncall,,,,Mat leave,,,OOPT,,IR oncall,,OOPC,,,,,,A/L,,,,,,,,,A/L,A/L,A/L,,,, +6/3/22,,,NO ONCALL,,,,Mat leave,,,,OOPT,,,,,,,,,A/L,,No Oncall,,,,Mat leave,,,OOPT,,IR oncall,,OOPC,,,,,,A/L,,,,,,,,,A/L,A/L,A/L,,,, +7/3/22,,OFF ONCALL,IDT,POST ONCALL,POST ONCALL,,OOPT,,,,OOPT,,,,,,,POST ONCALL,,,,No Oncall,,POST ONCALL,,Mat leave,,POST ONCALL,OOPT,,,,OOPC,,,POST ONCALL,POST ONCALL,,A/L,,,,,A/L,POST ONCALL,,,,,A/L,,,, +8/3/22,,OFF ONCALL,IDT,POST ONCALL,POST ONCALL,,OOPT,,,,OOPT,,,,,,,POST ONCALL,,,,No Oncall,,POST ONCALL,,Mat leave,,POST ONCALL,OOPT,,,,OOPC,,,POST ONCALL,POST ONCALL,,A/L,,,,,A/L,POST ONCALL,,,,,A/L,,,, +9/3/22,,OFF ONCALL,IDT,,,,OOPT,,,,OOPT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,OOPC,,,,,,A/L,,,,,A/L,,,,,,A/L,,,, +10/3/22,,OFF ONCALL,IDT,,,,OOPT,,,,OOPT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,OOPC,,,,,,A/L,,,,,A/L,,,,,,A/L,,,, +11/3/22,,OFF ONCALL,IDT,,,,OOPT,,,,OOPT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,OOPC,,,,,,A/L,,,,,A/L,,,,,,A/L,,,, +12/3/22,,OFF ONCALL,IDT,,,,OOPT,,,,OOPT,A/L,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,OOPC,,,A/L,,,A/L,,,,,A/L,,A/L,,,,A/L,,,, +13/3/22,,OFF ONCALL,IDT,,,,OOPT,,,,OOPT,A/L,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,OOPC,,,A/L,,,A/L,,,,,A/L,,A/L,,,,A/L,,,, +14/3/22,pre 2b,OFF ONCALL,IDT,,,,OOPT,,,,OOPT,A/L,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,OOPC,,,A/L,,,,,,,,A/L,,A/L,,pre 2b,,,,,, +15/3/22,pre 2b,OFF ONCALL,IDT,,,,OOPT,,,,OOPT,A/L,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,OOPC,,,A/L,,,,,,,,A/L,,A/L,,pre 2b,,,,,, +16/3/22,pre 2b,OFF ONCALL,IDT,,,,OOPT,,,,OOPT,A/L,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,OOPC,,,A/L,,,,,,,,A/L,,A/L,,pre 2b,A/L,,,,, +17/3/22,pre 2b,OFF ONCALL,IDT,,,,OOPT,,A/L,,OOPT,A/L,,,,A/L,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,OOPC,,,A/L,,,,,,,,A/L,,A/L,,pre 2b,,,,,, +18/3/22,pre 2b,OFF ONCALL,IDT,,,,OOPT,,,,OOPT,A/L,,,,A/L,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,OOPC,,,A/L,,,,,,,,A/L,,A/L,,pre 2b,,,,,, +19/3/22,pre 2b,OFF ONCALL,IDT,,,,OOPT,A/L,,,OOPT,A/L,,,,A/L,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,OOPC,,,A/L,,,,,IR ONCALL,,,A/L,,A/L,,pre 2b,,A/L,,,, +20/3/22,pre 2b,OFF ONCALL,IDT,,,,OOPT,A/L,,,OOPT,A/L,,,,A/L,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,OOPC,,,A/L,,,,,IR ONCALL,,,A/L,,A/L,,pre 2b,,A/L,,,, +21/3/22,pre 2b,OFF ONCALL,IDT,,,,OOPT,A/L,,,OOPT,A/L,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,OOPC,,,,,,,,,,,A/L,,,,pre 2b,,A/L,,,, +22/3/22,pre 2b,OFF ONCALL,IDT,,,,OOPT,A/L,,,OOPT,A/L,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,A/L,,,OOPC,,,,,,,,,,,,,,,pre 2b,,A/L,,,, +23/3/22,pre 2b,OFF ONCALL,IDT,,,,OOPT,A/L,,,OOPT,A/L,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,OOPC,,,,,,,,,,,,,,,pre 2b,,A/L,,,, +24/3/22,pre 2b,OFF ONCALL,IDT,,,,OOPT,A/L,,,OOPT,A/L,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,OOPC,,,,,,,,,,,,,,,pre 2b,,A/L,,,, +25/3/22,2b,OFF ONCALL,IDT,,,,OOPT,A/L,,,OOPT,A/L,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,OOPC,,,,,,,,,,,,,,,2b,,A/L,,,, +26/3/22,2b,OFF ONCALL,IDT,,,,OOPT,A/L,,,OOPT,A/L,,,,A/L,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,OOPC,,,,,,,,,,,,,,,2b,,A/L,,,, +27/3/22,2b,OFF ONCALL,IDT,,,,OOPT,A/L,,,OOPT,A/L,,,,A/L,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,OOPC,,,,,,,,,,,,,,,2b,,A/L,,,, +28/3/22,2b,OFF ONCALL,IDT,,,,OOPT,A/L,,,,,,,,A/L,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,OOPC,,,,,,,,,,,,,,,2b,,,,,, +29/3/22,2b,OFF ONCALL,IDT,,,,OOPT,A/L,,,,,,,,A/L,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,OOPC,,,,,,,,,,,,,,,2b,,A/L,,,, +30/3/22,2b,OFF ONCALL,IDT,,,,OOPT,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,OOPC,,,,,,,,,,,,,,,2b,,A/L,,,, +31/3/22,2b,OFF ONCALL,IDT,,,,OOPT,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,OOPC,,,,,,,,,,,,,,,2b,,A/L,,,, +1/4/22,2b,OFF ONCALL,IDT,,,,OOPT,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,No nights or twiligts,,,,,,,,,,,,,,,2b,,,Ramadan,A/L,, +2/4/22,,OFF ONCALL,IDT,,,A/L,OOPT,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,No nights or twiligts,,,,,,,A/L,,,,,,,,,,,Ramadan,A/L,, +3/4/22,,OFF ONCALL,IDT,,,A/L,OOPT,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,No nights or twiligts,,,,,,,A/L,,,,,,,,,,,Ramadan,A/L,, +4/4/22,,OFF ONCALL,IDT,,,A/L,OOPT,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,No nights or twiligts,,,,,,,,,,,,,,,,,,Ramadan,A/L,, +5/4/22,,OFF ONCALL,IDT,,,A/L,OOPT,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,No nights or twiligts,,,,,,,,,,,,,,,,,,Ramadan,A/L,, +6/4/22,,OFF ONCALL,IDT,,,A/L,OOPT,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,No nights or twiligts,,,,,,,,,,,,,,,,,,Ramadan,A/L,, +7/4/22,,OFF ONCALL,IDT,,,A/L,OOPT,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,S/L,,,No nights or twiligts,,,,,,,,,,,,,,,,,,Ramadan,A/L,, +8/4/22,,OFF ONCALL,IDT,,,A/L,OOPT,,,,,,,A/L,A/L,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,No nights or twiligts,,,,A/L,,,,,,,,,,,,,,Ramadan,A/L,, +9/4/22,,OFF ONCALL,IDT,,,A/L,OOPT,,A/L,,,,,A/L,A/L,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,No nights or twiligts,,,,A/L,,,,,,,,,,,,,,Ramadan,A/L,, +10/4/22,,OFF ONCALL,IDT,,,A/L,OOPT,,A/L,,,,,A/L,A/L,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,No nights or twiligts,,,,A/L,,,,,,,,,,,,,,Ramadan,A/L,, +11/4/22,,OFF ONCALL,IDT,,,,OOPT,,A/L,,,,,A/L,A/L,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,No nights or twiligts,,,,A/L,,,,,,,,,,,,,,Ramadan,,, +12/4/22,,OFF ONCALL,IDT,,,,OOPT,,,,,,,A/L,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,No nights or twiligts,,,A/L,A/L,,,A/L,,,,,,A/L,,,,,Ramadan,,, +13/4/22,,OFF ONCALL,IDT,,,,OOPT,,,,,,,A/L,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,No nights or twiligts,,,,A/L,,,A/L,,,,,,,,,,,Ramadan,,, +14/4/22,,OFF ONCALL,IDT,,,,OOPT,,,,,,,A/L,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,No nights or twiligts,,,,A/L,,,,,,,,,,,,,,Ramadan,,, +15/4/22,,OFF ONCALL,IDT,,,,OOPT,,,Worked Xmas,,Worked Xmas,,A/L,,,,Worked Xmas,,,Worked Xmas,No Oncall,,,,Mat leave,Worked Xmas,,OOPT,,,Worked Xmas,No nights or twiligts,Worked Xmas,,,A/L,,,,,,Worked Xmas,,,,,,,,Ramadan,,, +16/4/22,,OFF ONCALL,IDT,,,,OOPT,,,Worked Xmas,,Worked Xmas,,A/L,,,,Worked Xmas,,,Worked Xmas,No Oncall,,,,Mat leave,Worked Xmas,,OOPT,,,Worked Xmas,No nights,Worked Xmas,,,A/L,,,,,,Worked Xmas,,,,,,,,Ramadan,,, +17/4/22,,OFF ONCALL,IDT,,,,OOPT,,,Worked Xmas,,Worked Xmas,,A/L,,,,Worked Xmas,,,Worked Xmas,No Oncall,,,,Mat leave,Worked Xmas,,OOPT,,,Worked Xmas,No nights,Worked Xmas,,,A/L,,,,,,Worked Xmas,,,,,,,,Ramadan,,, +18/4/22,,OFF ONCALL,IDT,,,,OOPT,,,Worked Xmas,,Worked Xmas,,A/L,,,,Worked Xmas,,,Worked Xmas,No Oncall,,,,Mat leave,Worked Xmas,,OOPT,,A/L,Worked Xmas,No nights,Worked Xmas,,,A/L,,,,,,Worked Xmas,,,,,,,,Ramadan,,, +19/4/22,,OFF ONCALL,IDT,,,,OOPT,,,,,,,A/L,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,A/L,,No nights,,,,A/L,,,A/L,,,,,,,,,A/L,,Ramadan,,, +20/4/22,,OFF ONCALL,IDT,,,,OOPT,,,,,,,A/L,,,,,,,,No Oncall,,,A/L,Mat leave,,,OOPT,,A/L,,No nights,,,,A/L,,,,,,,,,,,,A/L,,Ramadan,,, +21/4/22,,OFF ONCALL,IDT,,,,OOPT,,,,,,,A/L,,,,,,,,No Oncall,,,A/L,Mat leave,,,OOPT,,A/L,,No nights,,,,A/L,,,,,,,,,,,,A/L,,Ramadan,,, +22/4/22,,OFF ONCALL,IDT,,,,OOPT,,,,,,,A/L,,,,,,,,No Oncall,,,A/L,Mat leave,,,OOPT,,A/L,,No nights,,,,A/L,,,,,,,,,,,,A/L,,Ramadan,,, +23/4/22,,OFF ONCALL,IDT,,,,OOPT,,,,,,,A/L,A/L,,,,,,,No Oncall,,,A/L,Mat leave,,,OOPT,,A/L,,No nights,,,,A/L,,,,IR ONCALL,,,,,,,,A/L,,Ramadan,,, +24/4/22,,OFF ONCALL,IDT,,,,OOPT,,,,,,,A/L,A/L,,,,,,,No Oncall,,,A/L,Mat leave,,,OOPT,,A/L,,No nights,,,,A/L,,,,IR ONCALL,,,,,,,,A/L,,Ramadan,,, +25/4/22,,OFF ONCALL,IDT,,,,OOPT,,,,,,,,,,,,,,,No Oncall,,,A/L,Mat leave,,,OOPT,,,,No nights,,,,,,,,,,,,,,,,A/L,,Ramadan,,, +26/4/22,,OFF ONCALL,IDT,,,,OOPT,,,,,,,,,,,,,,,No Oncall,,,A/L,Mat leave,,,OOPT,,,,No nights,,,,,,,,,,,,,,,,A/L,,Ramadan,,, +27/4/22,,OFF ONCALL,IDT,,,,OOPT,,,,,,,,,,,,,,,No Oncall,,,A/L,Mat leave,,,OOPT,,S/L,,No nights,,,,,,,,,,,,,,,,A/L,,Ramadan,,, +28/4/22,,OFF ONCALL,IDT,,,,OOPT,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,A/L,S/L,,No nights,,,,,,,A/L,,,,,,,,,A/L,,Ramadan,,, +29/4/22,,OFF ONCALL,IDT,,,,OOPT,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,No nights,,,,,,,A/L,,,,,,,,,A/L,,Ramadan,,, +30/4/22,,OFF ONCALL,IDT,,,,OOPT,,,,,,,,,,,,,,,No Oncall,,A/L,,Mat leave,,,OOPT,,,A/L,,,,,,A/L,,,,,,,,,,,A//L,,Ramadan,,, +1/5/22,,OFF ONCALL,IDT,,,,OOPT,,,,,,,,,,,,,,,No Oncall,,A/L,,Mat leave,,,OOPT,,,A/L,,,,,,A/L,,,,,,,,,,,A//L,,Ramadan,,, +2/5/22,,OFF ONCALL,IDT,,,,OOPT,,,,,,,,,,,,,,,No Oncall,,A/L,,Mat leave,,,OOPT,,,A/L,,,,,,A/L,,,,,,,,,,,A//L,,Ramadan,,, +3/5/22,,OFF ONCALL,IDT,,,,OOPT,,A/L,,,,,,,,,,,,,No Oncall,,A/L,,Mat leave,,,OOPT,,,A/L,,,,,,,,,,,,,,,,,A/L,,Ramadan,,, +4/5/22,,OFF ONCALL,IDT,,,,OOPT,,A/L,,,,,,,,,,,,,No Oncall,,A/L,,Mat leave,,,OOPT,,,A/L,,,,,,,,,,,,,,,,,A/L,,Ramadan,,, +5/5/22,,OFF ONCALL,IDT,,,,OOPT,,A/L,,,,,,,,,,,,,No Oncall,,A/L,,Mat leave,,,OOPT,,,A/L,,,,,,,,,,,,,,,,,A/L,,Ramadan,,, +6/5/22,,OFF ONCALL,IDT,,,,OOPT,,A/L,,,,,,,,,,,,,No Oncall,,A/L,,Mat leave,,,OOPT,,,A/L,,,,,,,,,IR ONCALL,,,,,,,,A/L,,Ramadan,,, +7/5/22,,OFF ONCALL,IDT,,,,OOPT,,A/L,,,,,,,,,,,,,No Oncall,,A/L,,Mat leave,,,OOPT,,,A/L,,,,,,,,,IR ONCALL,,,,,,,,,,Ramadan,,, +8/5/22,,OFF ONCALL,IDT,,,,OOPT,,A/L,,,,,,,,,,,,,No Oncall,,A/L,,Mat leave,,,OOPT,,,A/L,,,,,,,,,IR ONCALL,,,,,,,,,,Ramadan,,, +9/5/22,,OFF ONCALL,IDT,,,,OOPT,,A/L,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,A/L,,,,,,,,,,,,,,,,,,,Ramadan,,, +10/5/22,,OFF ONCALL,IDT,,,,OOPT,,A/L,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,A/L,,,,,,,,,,,,,,,,,,,Ramadan,,, +11/5/22,,OFF ONCALL,IDT,,,,OOPT,,A/L,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,A/L,,,,,,,,,,,,,,,,,,,Ramadan,,, +12/5/22,,OFF ONCALL,IDT,,,,OOPT,,A/L,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,A/L,,,,,,,,,,,,,,,,,,,Ramadan,,, +13/5/22,,OFF ONCALL,IDT,,,,OOPT,,A/L,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,A/L,,,,,,,,,,,,,,,,,,,Ramadan,,, +14/5/22,,OFF ONCALL,IDT,,,,OOPT,A/L,A/L,,,,,,,,,,A/L,,,No Oncall,,,,Mat leave,,,OOPT,,,A/L,A/L,,,,,,,,,,,,,,A/L,,,,,,, +15/5/22,,OFF ONCALL,IDT,,,,OOPT,A/L,A/L,,,,,,,,,,A/L,,,No Oncall,,,,Mat leave,,,OOPT,,,A/L,A/L,,,,,,,,,,,,,,A/L,,,,,,, +16/5/22,,OFF ONCALL,IDT,,,,OOPT,,A/L,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,A/L,,,,,,,,,,,,,,,,A/L,,,,, +17/5/22,,OFF ONCALL,IDT,,,,OOPT,,A/L,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,A/L,,,,,,,,,,,,,,,,A/L,,,,, +18/5/22,,OFF ONCALL,IDT,,,,OOPT,,A/L,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,A/L,,,,,,,,,,,,,,,,A/L,,,,, +19/5/22,,OFF ONCALL,IDT,,,,OOPT,,A/L,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,A/L,,,,,,,,,,,,,,,,A/L,,,,, +20/5/22,,OFF ONCALL,IDT,,,,OOPT,,A/L,,,,A/L,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,A/L,A/L,,,,,,,,,,,,,,,,,,,, +21/5/22,,OFF ONCALL,IDT,,,A/L,OOPT,,A/L,,,,A/L,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,A/L,A/L,,,,,,,,,,,,,,,,,,,, +22/5/22,,OFF ONCALL,IDT,,,A/L,OOPT,,A/L,,,,A/L,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,A/L,A/L,,,,,,,,,,,,,,,,,,,, +23/5/22,,OFF ONCALL,IDT,,,A/L,OOPT,,A/L,,,,,,A/L,,,,A/L,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,IR ONCALL,,,,,,,,,,,A/L,, +24/5/22,,OFF ONCALL,IDT,,,A/L,OOPT,,A/L,,,,,,A/L,,,,A/L,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,IR ONCALL,,,,,,,,,,,A/L,, +25/5/22,,OFF ONCALL,IDT,,,A/L,OOPT,,A/L,,,,,,A/L,,,,A/L,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,IR ONCALL,,,,,,,,,,,A/L,, +26/5/22,,OFF ONCALL,IDT,,,A/L,OOPT,,A/L,,,,,,A/L,,,,A/L,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,IR ONCALL,,,,,,,,,,,A/L,, +27/5/22,,OFF ONCALL,IDT,,,A/L,OOPT,,A/L,,,,,,A/L,,,,A/L,,,No Oncall,,,A/L,Mat leave,,,OOPT,,,,,,,,,,,,IR ONCALL,,,,,,,,,,,A/L,, +28/5/22,,OFF ONCALL,IDT,,,A/L,OOPT,,A/L,,A/L,,,,A/L,,,,A/L,,,No Oncall,,,A/L,Mat leave,,,OOPT,,,,,,,A/L,,,,,,,,,,A/L,,,,,,A/L,, +29/5/22,,OFF ONCALL,IDT,,,A/L,OOPT,,A/L,,A/L,,,,A/L,,,,A/L,,,No Oncall,,,A/L,Mat leave,,,OOPT,,,,,,,A/L,,,,,,,,,,A/L,,,,,,A/L,, +30/5/22,Pre 2a,OFF ONCALL,IDT,,,A/L,OOPT,,A/L,,,,,,A/L,,,Pre 2a,Pre 2a,,,No Oncall,,,A/L,Mat leave,,,OOPT,,A/L,,,,,,,,,,,,,,,Pre 2a,,,,,,Pre 2a,,Pre 2a +31/5/22,Pre 2a,OFF ONCALL,IDT,,,A/L,OOPT,,A/L,,,,,,A/L,,,Pre 2a,Pre 2a,,,No Oncall,,,A/L,Mat leave,,,OOPT,,A/L,,,,,,,,,,,,,,,Pre 2a,,,,,,Pre 2a,,Pre 2a +1/6/22,Pre 2a,OFF ONCALL,IDT,,,A/L,OOPT,,A/L,,,,,,A/L,,,Pre 2a,Pre 2a,,,No Oncall,,,A/L,Mat leave,,,OOPT,,A/L,,,,,,,,,,,,,,,Pre 2a,,,,,,Pre 2a,,Pre 2a +2/6/22,Pre 2a,OFF ONCALL,IDT,,,A/L,OOPT,,,,,,,,A/L,,,Pre 2a,Pre 2a,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,Pre 2a,,,,,,Pre 2a,,Pre 2a +3/6/22,Pre 2a,OFF ONCALL,IDT,,,A/L,OOPT,,,,,,,,A/L,,,Pre 2a,Pre 2a,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,Pre 2a,,,,,,Pre 2a,,Pre 2a +4/6/22,Pre 2a,OFF ONCALL,IDT,,,,OOPT,,,,,,,,A/L,,,Pre 2a,Pre 2a,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,Pre 2a,,,,,,Pre 2a,,Pre 2a +5/6/22,Pre 2a,OFF ONCALL,IDT,,,,OOPT,,,,,,,,A/L,,,Pre 2a,Pre 2a,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,Pre 2a,,,,,,Pre 2a,,Pre 2a +6/6/22,Pre 2a,OFF ONCALL,IDT,,,,OOPT,,,,,pre 2b,,,A/L,,,Pre 2a,Pre 2a,A/L,,No Oncall,,,,Mat leave,,,OOPT,A/L,,,,,,,,,,,IR ONCALL,,,,,Pre 2a,,A/L,,,,Pre 2a,,Pre 2a +7/6/22,Pre 2a,OFF ONCALL,IDT,,,,OOPT,,,,,pre 2b,,,A/L,,,Pre 2a,Pre 2a,A/L,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,IR ONCALL,,,,,Pre 2a,,A/L,,,,Pre 2a,,Pre 2a +8/6/22,Pre 2a,OFF ONCALL,IDT,,,,OOPT,,,,,pre 2b,,,A/L,,,Pre 2a,Pre 2a,A/L,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,IR ONCALL,,,,,Pre 2a,,,,,,Pre 2a,,Pre 2a +9/6/22,Pre 2a,OFF ONCALL,IDT,,,,OOPT,,A/L,,,pre 2b,,,A/L,,,Pre 2a,Pre 2a,A/L,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,IR ONCALL,,,,,Pre 2a,,,,,,Pre 2a,,Pre 2a +10/6/22,Pre 2a,OFF ONCALL,IDT,,,,OOPT,,A/L,,,pre 2b,,,,,,Pre 2a,Pre 2a,A/L,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,IR ONCALL,,,,,Pre 2a,,,,,,Pre 2a,,Pre 2a +11/6/22,Pre 2a,OFF ONCALL,IDT,,,,OOPT,A/L,,,,pre 2b,,,,,,Pre 2a,Pre 2a,A/L,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,IR ONCALL,,,,,Pre 2a,,,,,,Pre 2a,,Pre 2a +12/6/22,Pre 2a,OFF ONCALL,IDT,,,,OOPT,A/L,,,,pre 2b,,,,,,Pre 2a,Pre 2a,A/L,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,IR ONCALL,,,,,Pre 2a,,,,,,Pre 2a,,Pre 2a +13/6/22,Pre 2a,OFF ONCALL,IDT,,,,OOPT,,,,,pre 2b,,,,,,Pre 2a,Pre 2a,A/L,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,Pre 2a,,,,,,Pre 2a,,Pre 2a +14/6/22,Pre 2a,OFF ONCALL,IDT,,,,OOPT,,,,,pre 2b,,,,,,Pre 2a,Pre 2a,A/L,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,Pre 2a,,,,,,Pre 2a,,Pre 2a +15/6/22,2a,OFF ONCALL,IDT,,,,OOPT,,,,,pre 2b,,,,,,2a,2a,A/L,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,2a,,,,,,2a,,2a +16/6/22,,OFF ONCALL,IDT,,,,OOPT,,,,,pre 2b,,,A/L,,,A/L,,A/L,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,, +17/6/22,,OFF ONCALL,IDT,,,,OOPT,,,,,2b,,,A/L,,,A/L,,A/L,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,, +18/6/22,,OFF ONCALL,IDT,,,,OOPT,,,,A/L,2b,,,A/L,,,A/L,A/L,A/L,,No Oncall,,,,Mat leave,,,OOPT,,,,,A/L,,,,,,,,,,,,,,,,,,,, +19/6/22,,OFF ONCALL,IDT,,,,OOPT,,,,A/L,2b,,,A/L,,,A/L,A/L,A/L,,No Oncall,,,,Mat leave,,,OOPT,,,,,A/L,,,,,,,,,,,,,,,,,,,, +20/6/22,,OFF ONCALL,IDT,,,,OOPT,,,,A/L,2b,,,,,,A/L,A/L,,,No Oncall,,,,Mat leave,,,OOPT,,,,,A/L,,,,,,,,,,,,,,,A/L,,,,, +21/6/22,,OFF ONCALL,IDT,,,,OOPT,,,,A/L,2b,,,,,,A/L,A/L,,,No Oncall,,,,Mat leave,,,OOPT,,,,,A/L,,,,,,,,,,,,,,,A/L,,,,, +22/6/22,,OFF ONCALL,IDT,,,,OOPT,,,,A/L,2b,,,,,,A/L,A/L,,,No Oncall,,,,Mat leave,,,OOPT,,,,,A/L,,,,,,,,,,,,,,,,,,,, +23/6/22,,OFF ONCALL,IDT,,,,OOPT,,,,A/L,2b,,,,,,A/L,A/L,,,No Oncall,,,,Mat leave,,,OOPT,,,,,A/L,,,,,,,,,,,,,,,,,,,, +24/6/22,,OFF ONCALL,IDT,,,,OOPT,,,,A/L,2b,,,,,,A/L,A/L,,,No Oncall,,,,Mat leave,,,OOPT,,,,,A/L,,,,,,,,,,,,,,,,,,,, +25/6/22,,OFF ONCALL,IDT,,,,OOPT,A/L,,,A/L,,,,,,,,A/L,,,No Oncall,,,,Mat leave,,,OOPT,,,,,A/L,,,,,,,,,,,,,,,,,,,, +26/6/22,,OFF ONCALL,IDT,,,,OOPT,A/L,,,A/L,,,,,,,,A/L,,,No Oncall,,,,Mat leave,,,OOPT,,,,,A/L,,,,,,,,,,,,,,,,,,,, +27/6/22,,OFF ONCALL,IDT,,,,OOPT,,,,A/L,,,,,,,,A/L,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,, +28/6/22,,OFF ONCALL,IDT,,,,OOPT,,,,A/L,,,,,,,,A/L,,,No Oncall,,,,Mat leave,,,OOPT,A/L,,,,,,,,,,,,,,,,,,,,,,,, +29/6/22,,OFF ONCALL,IDT,,,,OOPT,,,,A/L,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,A/L,,,,,,,,,,,,,,,,,,,,,,,, +30/6/22,,OFF ONCALL,IDT,,,,OOPT,,,,A/L,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,, +1/7/22,,OFF ONCALL,IDT,,,,OOPT,,,,A/L,,A/L,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,A/L,,,,,,,,,,A/L,,,,,,,, +2/7/22,,OFF ONCALL,IDT,,,,OOPT,,A/L,,A/L,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,A/L,,,,,,,,,,A/L,,,,,,,, +3/7/22,,OFF ONCALL,IDT,,,,OOPT,,A/L,,A/L,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,A/L,,,,,,,,,,A/L,,,,,,,, +4/7/22,,OFF ONCALL,IDT,,,,OOPT,,,,A/L,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,A/L,,,,,,, +5/7/22,,OFF ONCALL,IDT,,,,OOPT,,,,A/L,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,A/L,,,,,,, +6/7/22,,OFF ONCALL,IDT,,,,OOPT,A/L,,,A/L,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,A/L,,,,,,, +7/7/22,,OFF ONCALL,IDT,,,,OOPT,A/L,,,A/L,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,, +8/7/22,,OFF ONCALL,IDT,,,,OOPT,A/L,,,A/L,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,, +9/7/22,,OFF ONCALL,IDT,,,,OOPT,,,,A/L,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,, +10/7/22,,OFF ONCALL,IDT,,,,OOPT,,,,A/L,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,, +11/7/22,,OFF ONCALL,IDT,,,,OOPT,,,A/L,A/L,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,, +12/7/22,,OFF ONCALL,IDT,,,,OOPT,,,A/L,A/L,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,, +13/7/22,,OFF ONCALL,IDT,,,,OOPT,,,A/L,A/L,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,, +14/7/22,,OFF ONCALL,IDT,,,,OOPT,A/L,,A/L,A/L,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,, +15/7/22,,OFF ONCALL,IDT,,,,OOPT,A/L,,A/L,A/L,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,A/L,,,,,,,,,A/L,A/L,,,,,,,, +16/7/22,,OFF ONCALL,IDT,,,,OOPT,A/L,,A/L,A/L,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,A/L,,,,,,,,,A/L,A/L,,,,,,,, +17/7/22,,OFF ONCALL,IDT,,,,OOPT,A/L,,A/L,A/L,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,A/L,,,,,,,,,A/L,A/L,,,,,,,, +18/7/22,,OFF ONCALL,IDT,,,,OOPT,A/L,,A/L,,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,A/L,,,,,,,,, +19/7/22,,OFF ONCALL,IDT,,,,OOPT,A/L,,A/L,,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,A/L,,,,,,,,, +20/7/22,,OFF ONCALL,IDT,,,,OOPT,A/L,,A/L,,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,A/L,,,,,,,,, +21/7/22,,OFF ONCALL,IDT,,,,OOPT,A/L,,A/L,,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,A/L,,,,,,,,, +22/7/22,,OFF ONCALL,IDT,,,,OOPT,A/L,,A/L,,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,A/L,,,,,,,,, +23/7/22,,OFF ONCALL,IDT,,,A/L,OOPT,A/L,,A/L,,,,A/L,,,,,,,,No Oncall,,,,,,,OOPT,,A/L,,A/L,,,,,,,,,,,,A/L,,,A/L,,OOPT,,,, +24/7/22,,OFF ONCALL,IDT,,,A/L,OOPT,A/L,,A/L,,,,A/L,,,,,,,,No Oncall,,,,,,,OOPT,,A/L,,A/L,,,,,,,,,,,,A/L,,,A/L,,OOPT,,,, +25/7/22,,OFF ONCALL,IDT,,,A/L,OOPT,,,A/L,,,,A/L,,,,,,A/L,,No Oncall,,,,,,,OOPT,,A/L,,A/L,,,,,,,,,,,,A/L,,,A/L,,OOPT,,,, +26/7/22,,OFF ONCALL,IDT,,,A/L,OOPT,,,A/L,,,,A/L,,,,,,A/L,,No Oncall,,,,,,,OOPT,,A/L,,A/L,,,,,,,,,,,,A/L,,,A/L,,OOPT,,,, +27/7/22,,OFF ONCALL,IDT,,,A/L,OOPT,,,A/L,,,,A/L,,,,,,A/L,,No Oncall,,,,,,,OOPT,,A/L,,A/L,,,,,,,,,,,,A/L,,,A/L,,OOPT,,,, +28/7/22,,OFF ONCALL,IDT,,,A/L,OOPT,,,A/L,,,,A/L,,,,,,A/L,,No Oncall,,,,,,,OOPT,,A/L,,A/L,,,,,,,,,,,,A/L,,,A/L,,OOPT,,,, +29/7/22,,OFF ONCALL,IDT,,,A/L,OOPT,,,A/L,,,,A/L,,,,,,A/L,,No Oncall,,,,,,,OOPT,,A/L,,A/L,,,,,,,,,A/L,,,A/L,,,A/L,,OOPT,,,, +30/7/22,,OFF ONCALL,IDT,,,A/L,OOPT,,,A/L,,,,A/L,,,,,,A/L,,No Oncall,,A/L,,,,,OOPT,,A/L,,A/L,,,,,,,,,A/L,,A/L,A/L,,,A/L,,OOPT,,,, +31/7/22,,OFF ONCALL,IDT,,,A/L,OOPT,,,A/L,,,,A/L,,,,,,A/L,,No Oncall,,A/L,,,,,OOPT,,A/L,,A/L,,,,,,,,,A/L,,A/L,A/L,,,A/L,,OOPT,,,, +1/8/22,,OFF ONCALL,IDT,,,,OOPT,,,A/L,,,,,,,,,,A/L,,No Oncall,,A/L,,,,,OOPT,,A/L,,,,,,,,,,,,,A/L,,,,A/L,OOPE,OOPT,,,, +2/8/22,,OFF ONCALL,IDT,,,,OOPT,,,A/L,,,,,,,,,,A/L,,No Oncall,,A/L,,,,,OOPT,,A/L,,,,,,,,,,,,,A/L,,,,A/L,OOPE,OOPT,,,, +3/8/22,,OFF ONCALL,IDT,,,,OOPT,,,A/L,,,,,,,,,,A/L,,No Oncall,,A/L,,,,,OOPT,,A/L,,,,,,,,,,,,,A/L,,,,A/L,OOPE,OOPT,,,, +4/8/22,,OFF ONCALL,IDT,,,,OOPT,,,A/L,,,,,,,,,,A/L,,No Oncall,,A/L,,,,,OOPT,,A/L,,,,,,,,,,,,,A/L,,,,A/L,OOPE,OOPT,,,, +5/8/22,,OFF ONCALL,IDT,,,,OOPT,,,A/L,,,,,,,,,,A/L,,No Oncall,,A/L,,,,,OOPT,,A/L,,,,,A/L,,,,,,,,A/L,,A/L,,A/L,OOPE,OOPT,,A/L,, +6/8/22,,OFF ONCALL,IDT,,,,OOPT,,,A/L,,,,,,,,,,A/L,,No Oncall,,A/L,,,,,OOPT,,A/L,,,,,A/L,,,,,,,,A/L,,A/L,,A/L,OOPE,OOPT,,A/L,, +7/8/22,,OFF ONCALL,IDT,,,,OOPT,,,A/L,,,,,,,,,,A/L,,No Oncall,,A/L,,,,,OOPT,,A/L,,,,,A/L,,,,,,,,A/L,,A/L,,A/L,OOPE,OOPT,,A/L,, +8/8/22,,OFF ONCALL,IDT,,,,OOPT,,,A/L,,,,,,,,,,,,No Oncall,,A/L,,,,,OOPT,,,,,,,,,,,,,,,,,,,A/L,OOPE,OOPT,,A/L,, +9/8/22,,OFF ONCALL,IDT,,,,OOPT,,,A/L,,,,,,,,,,,,No Oncall,,A/L,,,,,OOPT,,,,,,,,,,,,,,,,,,,A/L,OOPE,OOPT,,A/L,, +10/8/22,,OFF ONCALL,IDT,,,,OOPT,,,A/L,,,,,,,,,,,,No Oncall,,A/L,,,,,OOPT,,,,,,,,,,,,,,,,,,,,OOPE,OOPT,,A/L,, +11/8/22,,OFF ONCALL,IDT,,,,OOPT,,,A/L,,,,,,,,,,,,No Oncall,,A/L,,,,,OOPT,,,,,,,,,,,,,,,,,,,,OOPE,OOPT,,A/L,, +12/8/22,,OFF ONCALL,IDT,,,,OOPT,,,A/L,,,,,,,,,,,,No Oncall,,A/L,,,,,OOPT,,,,,,,,,,,,,,,,,,,,OOPE,OOPT,,A/L,, +13/8/22,,OFF ONCALL,IDT,,,A/L,OOPT,,A/L,A/L,,,,,,,,,,,,No Oncall,,A/L,,,,,OOPT,,,,,,,,,,,A/L,,,,,,,,,OOPE,OOPT,,A/L,, +14/8/22,,OFF ONCALL,IDT,,,A/L,OOPT,,A/L,A/L,,,,,,,,,,,,No Oncall,,A/L,,,,,OOPT,,,,,,,,,,,A/L,,,,,,,,,OOPE,OOPT,,A/L,, +15/8/22,,OFF ONCALL,IDT,,,A/L,OOPT,,A/L,A/L,,,,,,,,,,,,No Oncall,,A/L,,,,,OOPT,,,,,,,,,,,A/L,,,,,,,,,OOPE,OOPT,,,, +16/8/22,,OFF ONCALL,IDT,,,A/L,OOPT,,A/L,A/L,,,,,,,,,,,,No Oncall,,A/L,,,,,OOPT,,,,,,,,,,,A/L,,,,,,,,,OOPE,OOPT,,,, +17/8/22,,OFF ONCALL,IDT,,,A/L,OOPT,,A/L,A/L,,,,,,,,,,,,No Oncall,,A/L,,,,,OOPT,,,,,,,,,,,A/L,,,,,,,,,OOPE,OOPT,,,, +18/8/22,,OFF ONCALL,IDT,,,A/L,OOPT,,A/L,A/L,,,,,,,,,,,,No Oncall,,A/L,,,,,OOPT,,,,,,,,,,,A/L,,,,,,,,,OOPE,OOPT,,,, +19/8/22,,OFF ONCALL,IDT,,,A/L,OOPT,,A/L,A/L,,,,,,,,,,,,No Oncall,,A/L,,,,,OOPT,,,,,,,,,,,A/L,,,,,,,,,OOPE,OOPT,,,, +20/8/22,,OFF ONCALL,IDT,,,A/L,OOPT,,A/L,A/L,,,,,,,,,,,,No Oncall,,A/L,,,,,OOPT,,,,,,,,,,,A/L,,,,,,,,,OOPE,OOPT,,,, +21/8/22,,OFF ONCALL,IDT,,,A/L,OOPT,,A/L,A/L,,,,,,,,,,,,No Oncall,,A/L,,,,,OOPT,,,,,,,,,,,A/L,,,,,,,,,OOPE,OOPT,,,, +22/8/22,,OFF ONCALL,IDT,,,A/L,OOPT,,A/L,,,,,,,,,,,,,No Oncall,,A/L,,,,,OOPT,,,,,,,,A/L,,,,,,,,,,,A/L,OOPE,OOPT,,,, +23/8/22,,OFF ONCALL,IDT,,,A/L,OOPT,,A/L,,,,,,,,,,,,,No Oncall,,A/L,,,,,OOPT,,,,,,,,A/L,,,A/L,,,,,,,,A/L,OOPE,OOPT,,,, +24/8/22,,OFF ONCALL,IDT,,,A/L,OOPT,,A/L,,,,,,,,,,,,,No Oncall,,A/L,,,,,OOPT,,,,,,,,A/L,,,A/L,,,,,,,,A/L,OOPE,OOPT,,,, +25/8/22,,OFF ONCALL,IDT,,,A/L,OOPT,,A/L,,,,,,,,,,,,,No Oncall,,A/L,,,,,OOPT,,,,,,,,A/L,,,,,,,,,,,A/L,OOPE,OOPT,,,, +26/8/22,,OFF ONCALL,IDT,,,A/L,OOPT,,A/L,,,,A/L,,,,,,,,,No Oncall,,A/L,,,,,OOPT,,,,,,,,A/L,,,A/L,,,,,,,,A/L,OOPE,OOPT,,,, +27/8/22,,OFF ONCALL,IDT,A/L,,,OOPT,,A/L,,,,A/L,,,,,,,,,No Oncall,,A/L,,,,,OOPT,,,,,,,,,,,,,,,,,,,A/L,OOPE,OOPT,,,, +28/8/22,,OFF ONCALL,IDT,A/L,,,OOPT,,A/L,,,,A/L,,,,,,,,,No Oncall,,A/L,,,,,OOPT,,,,,,,,,,,,,,,,,,,A/L,OOPE,OOPT,,,, +29/8/22,,OFF ONCALL,IDT,A/L,,,OOPT,,A/L,,,,A/L,,,,,,,,,No Oncall,,A/L,,,,,OOPT,,,,,,,,,,,,,,,,,,,A/L,OOPE,OOPT,,,, +30/8/22,,OFF ONCALL,IDT,A/L,,,OOPT,,A/L,,,,,,,,,,,,,No Oncall,,A/L,,,,,OOPT,,A/L,,,,,,A/L,,,A/L,,,,,,,,,OOPE,OOPT,,,, +31/8/22,,OFF ONCALL,IDT,A/L,,,OOPT,,A/L,,,,,,,,,,,,,No Oncall,,A/L,,,,,OOPT,,A/L,,,,,,A/L,,,A/L,,,,,,,,,OOPE,OOPT,,,, +1/9/22,,OFF ONCALL,IDT,A/L,,,OOPT,,A/L,,,,,,,,,,,,,No Oncall,,A/L,,,,,OOPT,,A/L,,,,,,A/L,,,,,,,,,,,A/L,OOPE,OOPT,,,, +2/9/22,,OFF ONCALL,IDT,A/L,,,OOPT,,A/L,,,,,,,,,,,,,No Oncall,,A/L,,,,,OOPT,,,,,,,,A/L,,,,,,,,,,,A/L,OOPE,OOPT,,,, +3/9/22,,OFF ONCALL,IDT,A/L,,,OOPT,,A/L,,,,,,,,,,,,,No Oncall,,A/L,,,,,OOPT,,,,,,,,A/L,,,,,,,,,,,,OOPE,OOPT,,,, +4/9/22,,OFF ONCALL,IDT,A/L,,,OOPT,,A/L,,,,,,,,,,,,,No Oncall,,A/L,,,,,OOPT,,,,,,,,A/L,,,,,,,,,,,,OOPE,OOPT,,,, \ No newline at end of file diff --git a/leave.csv.bak b/leave.csv.bak new file mode 100644 index 0000000..698f48b --- /dev/null +++ b/leave.csv.bak @@ -0,0 +1,378 @@ +Rota 2021/2022,,," (POSSIBLE IDT)",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,80% until dec 1st,,,,,,,,,,,,,,, +Name,,Stephanie Bailey,Luciana Calovi Motschenbacher,Layla Bell,Seren Peters,Alex wood,Salma Aslam,Max Ireland,Charles Finan,Paul Ward,Tom Welsh,Matt Murphey,Delilah Trimmer,Max Finzel,Zainab Sharaf,Maththew O'Brien,Kyaw Tint,Nicolas Dziadulewicz,Jean Skumar,Michael Tomek,Vilim Kalamar,Dhuvresh Patel,Khalil Madbak,Georgina Edwards,Jenn Haw fong,Paul Jenkins,Jenna Millington,Amoolya Mannava,Ross Kruger,Sophie McGlade,Rebecca Murphy,Natasha Hougham,Jon Skinner,Fiona Lyall,Joel Lim,Wijhdan Abusrewil,Mark Haley,Andrew MacCormick,Alexander Sanchez - cabello,Sayed Hashim Alqarooni,Chong Yew Ng,Matthew Thorley,Harriet Conley,Cameron Bullock,Alexander Wijnberg,Christian Greer,Alan Eccles,Hannah Lewis,Sarath Vennam,Amina Odeh,Mo Babsail,Richard Chaytor,Sherafghan PROC,Madalina Drumea,Mark Fellows,Clement Leung +Rotation,,Exeter,Exeter,Exeter,Exeter,Exeter,Exeter,Exeter,Exeter,Exeter,Exeter,Exeter,Exeter,Derriford,Derriford,Derriford,Derriford,Derriford,Derriford,Derriford,Derriford,Derriford,Derriford,Derriford,Derriford,Derriford,Derriford,Derriford,Derriford,Derriford,Derriford,Derriford,Derriford Twilights,Derriford Twilights,Torbay,Torbay,Torbay,Torbay,Torbay,Torbay,Torbay,Torbay,Torbay,Truro,Truro,Truro,Truro,Truro,Truro,Truro,Truro,Truro,Truro no PROC,Barnstaple,Taunton,Taunton +Grade,,ST2,ST2,ST2,ST3,ST3,ST3,ST3,ST4,ST4,ST5,ST5,ST5,ST2,ST2,ST2,ST2,ST3,ST3,ST3,ST3,ST3,ST4,ST4,ST4,ST4,ST4,ST5,ST5,ST5,ST5,ST5,ST6,ST6,ST2,ST2,ST2,ST2,ST3,ST4,ST4,ST4,ST5,ST2,ST2,ST3,ST3,ST3,ST4,ST4,ST5,ST5,ST5 (until dec),ST3,ST2,ST4 +PROC site,,Derriford,,exeter,Torbay,Exeter,,Derriford,Derriford,Exeter,Exeter,Exeter,Derriford,Derriford,torbay,Torbay,derriford,,derriford,exeter,,Exeter,,,derriford,Derriford,,derriford,Derriford,Derriford,Exeter,,NA,NA,derriford,Torbay,Derriford,Derriford,,torbay,Derriford,Derriford,Derriford,Exeter,Derriford,Truro,Truro,Derriford,Truro,Truro,Derriford,derriford,Derriford,torbay,NA,NA +%FTE,,100,0,100,100,100,60,100,100,100,100,100,60,100,100,100,100,100,60,80,100,100,0,80,100,100,60,100,100,80,100,0,100,60,0,100,100,100,100,100,90,100,60,100,100,100,80,100,100,100,100,100,100,100,0,0 +NWD,,,,,,,"Thursday,Friday",,"Tuesday,Thursday",,,Thursday,"Monday,Tuesday",,,,,,"Monday,thursday",Wednesday,,,,Friday,,,,,,Friday,,,,"monday,friday",,"thursday, friday",,,,,Monday[6/9/21-30/11/21],,"monday,thursday",,,,Friday,,,,,,,,, +Flexible NWD,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +End Date,,,,,,,,,,,,04/02/22,,,,,,,,,,,,,,,,,,,,15/01/22,,,,,,,,,,,,,,,,,,,,,,,, +OOP,,,,,,,6/9/21-31/3/22,,,,,,,,,,,,,,,,,,,,6/9/21-2/5/22,,,1/1/22-5/9/22,6/9/21-28/2/22,,,,,,,,,,,,6/9/21-20/9/21,,,,,,,,,,,,, +Group,,Y1G1,Y1G1,Y1G2,Y3G1,Y3G1,Y3G2,Y3G2,,,,,,Y2G1,Y2G2,Y2G2,Y2G2,Y3G1,Y3G1,Y3G2,Y3G2,Y3G2,,,,,,,,,,,,,Y2G1,Y2G1,Y2G2,Y2G2,Y3G2,,,,,Y2G1,Y2G2,Y3G1,Y3G1,Y3G2,,,,,,,Y2G1, +?PROC,,,,,,,,,,,,,,,,,,,,,,,NO,,,,,,,,,,No,No,,,,,,,,,,,,,,,,,,,Yes - until ST6 in dec,???,NO,NO +Pair,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,2,,, +Date,Exams,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +6/9/21,,,NO ONCALL,,,POST ONCALL,Mat leave,,exeter_twilight,,exeter_twilight,exeter_twilight,,,A/L,,,,,A/L,,,No Oncall,POST ONCALL,POST ONCALL,POST ONCALL,Mat leave,,,plymouth_twilight,OOPT,OOPT,POST ONCALL,NO oncals,,POST ONCALL,,,,A/L,torbay_twilight,torbay_twilight,Mat leave,,,,,truro_twilight,truro_twilight,,A/L,POST ONCALL,,,, +7/9/21,,,NO ONCALL,,,POST ONCALL,Mat leave,,exeter_twilight,,exeter_twilight,exeter_twilight,,,A/L,,,,,A/L,,,No Oncall,POST ONCALL,POST ONCALL,POST ONCALL,Mat leave,,,plymouth_twilight,OOPT,OOPT,POST ONCALL,NO oncals,,POST ONCALL,,,,A/L,torbay_twilight,torbay_twilight,Mat leave,,,,,truro_twilight,truro_twilight,,A/L,POST ONCALL,,,, +8/9/21,,,NO ONCALL,,,,Mat leave,,2b course,2b course,,,,,,,,,,A/L,,,No Oncall,2b course,2b course,,Mat leave,,2b course,,OOPT,OOPT,,NO oncals,,,,,,A/L,2b course,2b course,Mat leave,,,,,,2b course,2b course,A/L,,,,, +9/9/21,,,NO ONCALL,,,,Mat leave,,2b course,2b course,,,,,,,,,,A/L,,,No Oncall,2b course,2b course,,Mat leave,,2b course,,OOPT,OOPT,,NO oncals,,,,,,A/L,2b course,2b course,Mat leave,,,,,,2b course,2b course,A/L,,,,, +10/9/21,,,NO ONCALL,,A/L,,Mat leave,,,,,,,,,,,,,A/L,,,No Oncall,,,,Mat leave,,,A/L,OOPT,OOPT,,NO oncals,,,,,,,,,Mat leave,,,,,,,,A/L,,,,, +11/9/21,,,NO ONCALL,,A/L,,Mat leave,,,,,,,,,,,,,A/L,,,No Oncall,,,,Mat leave,,,A/L,OOPT,OOPT,,NO oncals,,,,,,,,,Mat leave,,,,,,,,A/L,,,,, +12/9/21,,,NO ONCALL,,A/L,,Mat leave,,,,,,,,,,,,,A/L,,,No Oncall,,,,Mat leave,,,A/L,OOPT,OOPT,,NO oncals,,,,,,,,,Mat leave,,,,,,,,A/L,,,,, +13/9/21,,,NO ONCALL,,A/L,,Mat leave,,,,,,,,,,,,,A/L,,,No Oncall,,,,Mat leave,,,A/L,OOPT,OOPT,,NO oncals,,,,,,,,,Mat leave,,,,,,,,,,,,, +14/9/21,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,A/L,,,No Oncall,,,,Mat leave,,,,OOPT,OOPT,,NO oncals,,,,,,,,,Mat leave,,,,,,,,,,,,, +15/9/21,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,A/L,,,No Oncall,,,,Mat leave,,,,OOPT,OOPT,,NO oncals,,,,,,,,,Mat leave,,,,,,,,,,,,, +16/9/21,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,A/L,,,No Oncall,,,,Mat leave,,,,OOPT,OOPT,,NO oncals,,,,,,,,,Mat leave,,,,,,,,,,,,, +17/9/21,Pre 2B,,NO ONCALL,,,,Mat leave,,Pre 2B,Pre 2B,A/L,,Pre 2B,,,,,,,A/L,,,No Oncall,,Pre 2B,,Mat leave,,,,OOPT,OOPT,,NO oncals,,,,,,Pre 2B,Pre 2B,Pre 2B,Mat leave,,,,Pre 2B,,Pre 2B,Pre 2B,,,,,, +18/9/21,Pre 2B,,NO ONCALL,,,,Mat leave,,Pre 2B,Pre 2B,A/L,,Pre 2B,,,,,,,,,,No Oncall,,Pre 2B,,Mat leave,,,,OOPT,OOPT,,NO oncals,,,,,,Pre 2B,Pre 2B,Pre 2B,Mat leave,,,,Pre 2B,,Pre 2B,Pre 2B,,,,,, +19/9/21,Pre 2B,,NO ONCALL,,,,Mat leave,,Pre 2B,Pre 2B,A/L,,Pre 2B,,,,,,,,,,No Oncall,,Pre 2B,,Mat leave,,,,OOPT,OOPT,,NO oncals,,,,,,Pre 2B,Pre 2B,Pre 2B,Mat leave,,,,Pre 2B,,Pre 2B,Pre 2B,,,,,, +20/9/21,Pre 2B,,NO ONCALL,,,,Mat leave,,Pre 2B,Pre 2B,A/L,,Pre 2B,,,,,,,,,,No Oncall,,Pre 2B,,Mat leave,,,,OOPT,OOPT,,NO oncals,,,,,,Pre 2B,Pre 2B,Pre 2B,Mat leave,,,,Pre 2B,,Pre 2B,Pre 2B,,,,,, +21/9/21,Pre 2B,,NO ONCALL,,,,Mat leave,,Pre 2B,Pre 2B,,,Pre 2B,,,,,,,,,,No Oncall,,Pre 2B,,Mat leave,,,,OOPT,OOPT,,NO oncals,,,,,,Pre 2B,Pre 2B,Pre 2B,No nights,,,,Pre 2B,,Pre 2B,Pre 2B,,,,,, +22/9/21,Pre 2B,,NO ONCALL,,,,Mat leave,,Pre 2B,Pre 2B,,,Pre 2B,,,,,,,,,,No Oncall,,Pre 2B,,Mat leave,,,,OOPT,OOPT,,NO oncals,,,,,,Pre 2B,Pre 2B,Pre 2B,No nights,,,,Pre 2B,,Pre 2B,Pre 2B,,,,,, +23/9/21,Pre 2B,,NO ONCALL,,,,Mat leave,,Pre 2B,Pre 2B,,A/L,Pre 2B,,,,,,,,,,No Oncall,,Pre 2B,,Mat leave,,,,OOPT,OOPT,,NO oncals,,A/L,,,,Pre 2B,Pre 2B,Pre 2B,No nights,,,,Pre 2B,,Pre 2B,Pre 2B,,,,,, +24/9/21,Pre 2B,,NO ONCALL,,,,Mat leave,,Pre 2B,Pre 2B,,,Pre 2B,,,,,,,,,,No Oncall,,Pre 2B,,Mat leave,,,,OOPT,OOPT,,NO oncals,,A/L,,,,Pre 2B,Pre 2B,Pre 2B,A/L,,,,Pre 2B,,Pre 2B,Pre 2B,,,,,, +25/9/21,Pre 2B,,NO ONCALL,,,,Mat leave,,Pre 2B,Pre 2B,,,Pre 2B,,,,,,,,,,No Oncall,,Pre 2B,,Mat leave,,,,OOPT,OOPT,,NO oncals,,A/L,,,,Pre 2B,Pre 2B,Pre 2B,A/L,,,,Pre 2B,,Pre 2B,Pre 2B,,,,,, +26/9/21,Pre 2B,,NO ONCALL,,,,Mat leave,,Pre 2B,Pre 2B,,,Pre 2B,,,,,,,,,,No Oncall,,Pre 2B,,Mat leave,,,,OOPT,OOPT,,NO oncals,,A/L,,,,Pre 2B,Pre 2B,Pre 2B,A/L,,,,Pre 2B,,Pre 2B,Pre 2B,,,,,, +27/9/21,Pre 2B,,NO ONCALL,,,,Mat leave,,Pre 2B,Pre 2B,,,Pre 2B,,,,,,,,,,No Oncall,,Pre 2B,,Mat leave,,,,OOPT,OOPT,,,,,,,,Pre 2B,Pre 2B,Pre 2B,No nights,,,,Pre 2B,,Pre 2B,Pre 2B,,,,,, +28/9/21,Pre 2B,,NO ONCALL,,,,Mat leave,,Pre 2B,Pre 2B,,,Pre 2B,,,,,,,,,,No Oncall,,Pre 2B,,Mat leave,,,,OOPT,OOPT,,,,,,,,Pre 2B,Pre 2B,Pre 2B,No nights,,,,Pre 2B,,Pre 2B,Pre 2B,,,,,, +29/9/21,Pre 2B,,NO ONCALL,,,,Mat leave,,Pre 2B,Pre 2B,,,Pre 2B,,,,,,,,,,No Oncall,,Pre 2B,,Mat leave,,,,OOPT,OOPT,,,,,,,,Pre 2B,Pre 2B,Pre 2B,No nights,,,,Pre 2B,,Pre 2B,Pre 2B,,,,,, +30/9/21,Pre 2B,,NO ONCALL,,,,Mat leave,,Pre 2B,Pre 2B,,,Pre 2B,,,,,,,,,,No Oncall,,Pre 2B,,Mat leave,,,,OOPT,OOPT,,,,,,,,Pre 2B,Pre 2B,Pre 2B,No nights,,,,Pre 2B,,Pre 2B,Pre 2B,,,,,, +1/10/21,2B,,NO ONCALL,,,,Mat leave,,2B,2B,A/L,,2B,A/L,,,,,,,,,No Oncall,,2B,,Mat leave,,,,OOPT,OOPT,,,,,,,,2B,2B,2B,No nights,,,,2B,,2B,2B,,,,,, +2/10/21,2B,,NO ONCALL,,,,Mat leave,,2B,2B,A/L,,2B,A/L,,,,,,,,,No Oncall,,2B,,Mat leave,,,,OOPT,OOPT,,,,,,,,2B,2B,2B,No nights,,,,2B,,2B,2B,,,,,, +3/10/21,2B,,NO ONCALL,,,,Mat leave,,2B,2B,A/L,,2B,A/L,,,,,,,,,No Oncall,,2B,,Mat leave,,,,OOPT,OOPT,,,,,,,,2B,2B,2B,No nights,,,,2B,,2B,2B,,,,,, +4/10/21,2B,,NO ONCALL,,,,Mat leave,,2B,2B,A/L,,2B,,,,,,,,,,No Oncall,,2B,,Mat leave,,,,OOPT,OOPT,,,,,,,,2B,2B,2B,No nights,,,,2B,,2B,2B,,,,,, +5/10/21,2B,,NO ONCALL,,,,Mat leave,,2B,2B,,,2B,,,,,,,,,,No Oncall,,2B,,Mat leave,,,,OOPT,OOPT,,,,,,,,2B,2B,2B,No nights,,,,2B,,2B,2B,,,,,, +6/10/21,2B,,NO ONCALL,,,,Mat leave,,2B,2B,,,2B,,,,,,,,,,No Oncall,,2B,,Mat leave,,,,OOPT,OOPT,,,,,,,,2B,2B,2B,No nights,,,,2B,,2B,2B,,,,,, +7/10/21,2B,,NO ONCALL,,,,Mat leave,,2B,2B,,,2B,,,,,,,,,,No Oncall,,2B,,Mat leave,,,,OOPT,OOPT,,,,,,,,2B,2B,2B,No nights,,,,2B,,2B,2B,,,,,, +8/10/21,2B,,NO ONCALL,,,,Mat leave,,2B,2B,,,2B,,,,,,,,,,No Oncall,,2B,,Mat leave,,,A/L,OOPT,OOPT,,,,,,,,2B,2B,2B,No nights,,,,2B,,2B,2B,,,,,, +9/10/21,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,A/L,OOPT,OOPT,,,,,,,,,,,No nights,,,,,,,,,,,,, +10/10/21,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,A/L,OOPT,OOPT,,,,,,,,,,,No nights,,,,,,,,,,,,, +11/10/21,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,A/L,OOPT,OOPT,,,,,,,,,,,No nights,,,,,,,,,,,,, +12/10/21,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,OOPT,,,,,,,,,,,No nights,,,,,,,,,,,,, +13/10/21,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,OOPT,,,,,,,,,,,No nights,,,,,,,,,,,,, +14/10/21,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,OOPT,,,,,,,,,,,No nights,,,,,,,,,,,,, +15/10/21,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,OOPT,,,,,,,,,,,No nights,,,,,,,,,,,,, +16/10/21,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,OOPT,,,,,,,,,,,No nights,,,,,,,,,,,,, +17/10/21,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,OOPT,,,,,,,,,,,No nights,,,,,,,,,,,,, +18/10/21,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,OOPT,,,,,,,,,,,No nights,,,,,,,,,,,,, +19/10/21,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,OOPT,,,,,,,,,,,No nights,,,,,,,,,,,,, +20/10/21,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,OOPT,,,,,,,,,,,No nights,,,,,,,,,,,,, +21/10/21,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,OOPT,,,,,,,,,,,No nights,,,,,,,,,,,,, +22/10/21,,,NO ONCALL,,,,Mat leave,,A/L,,A/L,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,OOPT,,,,,,,A/L,,,,No nights,,,,,A/L,,,,,,,, +23/10/21,,,NO ONCALL,,,,Mat leave,,A/L,,A/L,,,,A/L,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,OOPT,,A/L,,,,,A/L,A/L,,,,,,,,A/L,,,,,,,, +24/10/21,,,NO ONCALL,,,,Mat leave,,A/L,,A/L,,,,A/L,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,OOPT,,A/L,,,,,A/L,A/L,,,,,,,,A/L,,,,,,,, +25/10/21,,,NO ONCALL,,,,Mat leave,,A/L,,A/L,,,,A/L,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,A/L,,,,,,A/L,,,,,,,,,,,,,,,, +26/10/21,,,NO ONCALL,,,,Mat leave,,,,A/L,,,,A/L,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,A/L,,,,,,A/L,,,,,,,,,,,,,,,, +27/10/21,,,NO ONCALL,,,,Mat leave,,,,A/L,,,,A/L,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,A/L,,,,,,A/L,,,,,,,,,,,,,,,, +28/10/21,,,NO ONCALL,,,,Mat leave,,,,A/L,,,,A/L,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,A/L,,,,,,A/L,,,,,,,,,,,,,,,, +29/10/21,,,NO ONCALL,,,,Mat leave,,,,A/L,,,,A/L,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,A/L,,,,,,A/L,,,,,,,,,,,,,,,, +30/10/21,,,NO ONCALL,,,A/L,Mat leave,,,,A/L,,,,A/L,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,A/L,,A/L,,,,A/L,,,,,,,,,,,,,,,, +31/10/21,,,NO ONCALL,,,A/L,Mat leave,,,,A/L,,,,A/L,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,A/L,,A/L,,,,A/L,,,,,,,,,,,,,,,, +1/11/21,Pre 2a,,NO ONCALL,,Pre 2a,Pre 2a,Mat leave,Pre 2a,,Pre 2a,,,,,,,,Pre 2a,Pre 2a,Pre 2a,Pre 2a,Pre 2a,No Oncall,Pre 2a,Pre 2a,,Mat leave,,,,OOPT,,,,,Pre 2a,,,Pre 2a,,Pre 2a,,,,,Pre 2a,,Pre 2a,Pre 2a,,,,,Pre 2a,,Pre 2a +2/11/21,Pre 2a,,NO ONCALL,,Pre 2a,Pre 2a,Mat leave,Pre 2a,,Pre 2a,,,,,,,,Pre 2a,Pre 2a,Pre 2a,Pre 2a,Pre 2a,No Oncall,Pre 2a,Pre 2a,,Mat leave,,,,OOPT,,,,,Pre 2a,,,Pre 2a,,Pre 2a,,,,,Pre 2a,,Pre 2a,Pre 2a,,,,,Pre 2a,,Pre 2a +3/11/21,Pre 2a,,NO ONCALL,,Pre 2a,Pre 2a,Mat leave,Pre 2a,,Pre 2a,,,,,,,,Pre 2a,Pre 2a,Pre 2a,Pre 2a,Pre 2a,No Oncall,Pre 2a,Pre 2a,,Mat leave,,,,OOPT,,,,,Pre 2a,,,Pre 2a,,Pre 2a,,,,,Pre 2a,,Pre 2a,Pre 2a,,A/L,,,Pre 2a,,Pre 2a +4/11/21,Pre 2a,,NO ONCALL,,Pre 2a,Pre 2a,Mat leave,Pre 2a,,Pre 2a,,,,,,,,Pre 2a,Pre 2a,Pre 2a,Pre 2a,Pre 2a,No Oncall,Pre 2a,Pre 2a,,Mat leave,,,,OOPT,,,,,Pre 2a,,,Pre 2a,,Pre 2a,,,,,Pre 2a,,Pre 2a,Pre 2a,,A/L,,,Pre 2a,,Pre 2a +5/11/21,Pre 2a,,NO ONCALL,,Pre 2a,Pre 2a,Mat leave,Pre 2a,,Pre 2a,,,,,,,,Pre 2a,Pre 2a,Pre 2a,Pre 2a,Pre 2a,No Oncall,Pre 2a,Pre 2a,,Mat leave,,,A/L,OOPT,,,,,Pre 2a,,,Pre 2a,,Pre 2a,,,,,Pre 2a,,Pre 2a,Pre 2a,,A/L,,,Pre 2a,,Pre 2a +6/11/21,Pre 2a,,NO ONCALL,,Pre 2a,Pre 2a,Mat leave,Pre 2a,,Pre 2a,,,,,,,,Pre 2a,Pre 2a,Pre 2a,Pre 2a,Pre 2a,No Oncall,Pre 2a,Pre 2a,,Mat leave,,,A/L,OOPT,,,,,Pre 2a,,,Pre 2a,,Pre 2a,,,,,Pre 2a,,Pre 2a,Pre 2a,,A/L,,,Pre 2a,,Pre 2a +7/11/21,Pre 2a,,NO ONCALL,,Pre 2a,Pre 2a,Mat leave,Pre 2a,,Pre 2a,,,,,,,,Pre 2a,Pre 2a,Pre 2a,Pre 2a,Pre 2a,No Oncall,Pre 2a,Pre 2a,,Mat leave,,,A/L,OOPT,,,,,Pre 2a,,,Pre 2a,,Pre 2a,,,,,Pre 2a,,Pre 2a,Pre 2a,,A/L,,,Pre 2a,,Pre 2a +8/11/21,Pre 2a,,NO ONCALL,,Pre 2a,Pre 2a,Mat leave,Pre 2a,,Pre 2a,,,,,,,,Pre 2a,Pre 2a,Pre 2a,Pre 2a,Pre 2a,No Oncall,Pre 2a,Pre 2a,,Mat leave,,,,OOPT,,,,,Pre 2a,,,Pre 2a,,Pre 2a,,,,,Pre 2a,,Pre 2a,Pre 2a,,,,,Pre 2a,,Pre 2a +9/11/21,Pre 2a,,NO ONCALL,,Pre 2a,Pre 2a,Mat leave,Pre 2a,,Pre 2a,,,,,,,,Pre 2a,Pre 2a,Pre 2a,Pre 2a,Pre 2a,No Oncall,Pre 2a,Pre 2a,,Mat leave,,,,OOPT,,,,,Pre 2a,,,Pre 2a,,Pre 2a,,,,,Pre 2a,,Pre 2a,Pre 2a,,,,,Pre 2a,,Pre 2a +10/11/21,Pre 2a,,NO ONCALL,,Pre 2a,Pre 2a,Mat leave,Pre 2a,,Pre 2a,,,,,,,,Pre 2a,Pre 2a,Pre 2a,Pre 2a,Pre 2a,No Oncall,Pre 2a,Pre 2a,,Mat leave,,,,OOPT,,,,,Pre 2a,,,Pre 2a,,Pre 2a,,,,,Pre 2a,,Pre 2a,Pre 2a,,A/L,,,Pre 2a,,Pre 2a +11/11/21,Pre 2a,,NO ONCALL,,Pre 2a,Pre 2a,Mat leave,Pre 2a,,Pre 2a,,,,,,,,Pre 2a,Pre 2a,Pre 2a,Pre 2a,Pre 2a,No Oncall,Pre 2a,Pre 2a,,Mat leave,,,,OOPT,,,,,Pre 2a,,,Pre 2a,,Pre 2a,,,,,Pre 2a,,Pre 2a,Pre 2a,,A/L,,,Pre 2a,,Pre 2a +12/11/21,Pre 2a,,NO ONCALL,,Pre 2a,Pre 2a,Mat leave,Pre 2a,,Pre 2a,,,,,,,,Pre 2a,Pre 2a,Pre 2a,Pre 2a,Pre 2a,No Oncall,Pre 2a,Pre 2a,,Mat leave,,,,OOPT,,,,,Pre 2a,,,Pre 2a,,Pre 2a,,,,,Pre 2a,,Pre 2a,Pre 2a,,A/L,,,Pre 2a,,Pre 2a +13/11/21,Pre 2a,,NO ONCALL,,Pre 2a,Pre 2a,Mat leave,Pre 2a,,Pre 2a,,,,,,,,Pre 2a,Pre 2a,Pre 2a,Pre 2a,Pre 2a,No Oncall,Pre 2a,Pre 2a,,Mat leave,,,,OOPT,,,,A/L,Pre 2a,,,Pre 2a,,Pre 2a,,,,,Pre 2a,,Pre 2a,Pre 2a,,A/L,,,Pre 2a,,Pre 2a +14/11/21,Pre 2a,,NO ONCALL,,Pre 2a,Pre 2a,Mat leave,Pre 2a,,Pre 2a,,,,,,,,Pre 2a,Pre 2a,Pre 2a,Pre 2a,Pre 2a,No Oncall,Pre 2a,Pre 2a,,Mat leave,,,,OOPT,,,,A/L,Pre 2a,,,Pre 2a,,Pre 2a,,,,,Pre 2a,,Pre 2a,Pre 2a,,A/L,,,Pre 2a,,Pre 2a +15/11/21,Pre 2a,,NO ONCALL,,Pre 2a,Pre 2a,Mat leave,Pre 2a,,Pre 2a,,,,,,,,Pre 2a,Pre 2a,Pre 2a,Pre 2a,Pre 2a,No Oncall,Pre 2a,Pre 2a,,Mat leave,,,,OOPT,,,,A/L,Pre 2a,,,Pre 2a,,Pre 2a,,,,,Pre 2a,,Pre 2a,Pre 2a,,,,,Pre 2a,,Pre 2a +16/11/21,Pre 2a,,NO ONCALL,,Pre 2a,Pre 2a,Mat leave,Pre 2a,,Pre 2a,,,,,,,,Pre 2a,Pre 2a,Pre 2a,Pre 2a,Pre 2a,No Oncall,Pre 2a,Pre 2a,,Mat leave,,,,OOPT,,,,A/L,Pre 2a,,,Pre 2a,,Pre 2a,,,,,Pre 2a,,Pre 2a,Pre 2a,,,,,Pre 2a,,Pre 2a +17/11/21,2A,,NO ONCALL,,2A,2A,Mat leave,2A,,2A,,,,,,,,2A,2A,2A,2A,2A,No Oncall,2A,2A,,Mat leave,,,,OOPT,,,,A/L,2A,,,2A,,2A,,,,,2A,,2A,2A,,,,,2A,,2A +18/11/21,,,NO ONCALL,,,,Mat leave,,,,,S/L,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,A/L,,,,A/L,,,,,,,,,A/L,,,,,,,, +19/11/21,,,NO ONCALL,,,,Mat leave,,,,,S/L,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,A/L,,,,A/L,,,,,,,,,A/L,,,,,,,, +20/11/21,,,NO ONCALL,,,A/L,Mat leave,,,,,S/L,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,A/L,,,,A/L,,,,,,,,,A/L,,,A/L,,,,, +21/11/21,,,NO ONCALL,,,A/L,Mat leave,,,,,S/L,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,A/L,,,,A/L,,,,,,,,,A/L,,,A/L,,,,, +22/11/21,,,NO ONCALL,,,A/L,Mat leave,,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,A/L,,,,A/L,,,,,,,,,A/L,,,A/L,,,,, +23/11/21,,,NO ONCALL,,,A/L,Mat leave,,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,A/L,,,,A/L,,,,,,,,,A/L,,,A/L,,,,, +24/11/21,,,NO ONCALL,,,A/L,Mat leave,,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,A/L,,,,A/L,,,,,,,,,A/L,,,A/L,,,,, +25/11/21,,,NO ONCALL,,,A/L,Mat leave,,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,A/L,,,,A/L,,,,,,,,,A/L,,,A/L,,,,, +26/11/21,,,NO ONCALL,,,A/L,Mat leave,,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,A/L,,,,A/L,,,,,,,,,A/L,,,A/L,,,,, +27/11/21,,,NO ONCALL,,,A/L,Mat leave,,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,A/L,,,,A/L,,,,,,,,,A/L,,,A/L,,,,, +28/11/21,,,NO ONCALL,,,A/L,Mat leave,,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,A/L,,,,A/L,,,,,,,,,A/L,,,A/L,,,,, +29/11/21,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,,,,,A/L,,,,,,,,,A/L,,,A/L,,,,, +30/11/21,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,,,,,A/L,,,,,,,,,A/L,,,A/L,,,,, +1/12/21,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,,,,,A/L,,,,,,,,,A/L,,,A/L,,,,, +2/12/21,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,,,,,A/L,,,,,,,,,A/L,,,A/L,,,,, +3/12/21,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,OFF,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,,,,,A/L,,,,,,,,,A/L,,,A/L,,,,, +4/12/21,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,OFF,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,,,,,,,,,,,,,,A/L,,,A/L,,,,, +5/12/21,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,OFF,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,,,,,,,,,,,,,,A/L,,,A/L,,,,, +6/12/21,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,, +7/12/21,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,, +8/12/21,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,, +9/12/21,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,,,,,,,,,,,,,,,,,,A/L,,,, +10/12/21,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,,,,,,,,,,,,,,,,,,A/L,,,, +11/12/21,,,NO ONCALL,,,,Mat leave,,A/L,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,,,A/L,,,,,,,,,,,,,,,A/L,,,, +12/12/21,,,NO ONCALL,,,,Mat leave,,A/L,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,,,A/L,,,,,,,,,,,,,,,A/L,,,, +13/12/21,,,NO ONCALL,,,,Mat leave,,A/L,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,,,A/L,,,,,,,,,,,,,,,,,,, +14/12/21,,,NO ONCALL,,,,Mat leave,,A/L,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,,,A/L,,,,,,,,,,,,,,,,,,, +15/12/21,,,NO ONCALL,,,,Mat leave,,A/L,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,,,A/L,,,,,,,,,,,,,,,,,,, +16/12/21,,,NO ONCALL,,,,Mat leave,,A/L,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,,,A/L,,,,,,,,,,,,,,,,,,, +17/12/21,,,NO ONCALL,,,,Mat leave,,A/L,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,A/L,OOPT,,,,,,A/L,,,,,,,,,,,,,,,,,,, +18/12/21,,,NO ONCALL,,,,Mat leave,,A/L,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,A/L,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,A/L +19/12/21,,,NO ONCALL,,,,Mat leave,,A/L,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,A/L,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,A/L +20/12/21,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,A/L +21/12/21,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,A/L +22/12/21,,,NO ONCALL,,,,Mat leave,,,,,,,A/L,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,A/L +23/12/21,,,NO ONCALL,,OFF,,Mat leave,,,,,,,A/L,,,,,,,OFF,,No Oncall,,,,Mat leave,,,,OOPT,,,,,,,,OFF,OFF,OFF,,,,,,,OFF,OFF,,OFF,,,OFF,,A/L +24/12/21,,,NO ONCALL,,OFF,,Mat leave,,,,,,,A/L,,,,,,,OFF,,No Oncall,,,,Mat leave,,,,OOPT,,,,,,,,OFF,OFF,OFF,,,,,,,OFF,OFF,,OFF,,,OFF,,A/L +25/12/21,,,NO ONCALL,,OFF,,Mat leave,,,,,,,A/L,,,,,,,OFF,,No Oncall,,,,Mat leave,,,,OOPT,,,,,,,,OFF,OFF,OFF,,,,,,,OFF,OFF,,OFF,,,OFF,,A/L +26/12/21,,,NO ONCALL,,OFF,,Mat leave,,,,,,,A/L,,,,,,,OFF,,No Oncall,,,,Mat leave,,,,OOPT,,,,,,,,OFF,OFF,OFF,,,,,,,OFF,OFF,,OFF,,,OFF,,A/L +27/12/21,,,NO ONCALL,,OFF,,Mat leave,,,,,,,A/L,,,,,,,OFF,,No Oncall,,,,Mat leave,,,,OOPT,,,,,,,,OFF,OFF,OFF,,,,,,,OFF,OFF,,OFF,,,OFF,,A/L +28/12/21,,,NO ONCALL,,,,Mat leave,,,,,,,A/L,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,,,,,,OFF,,,,,,,,,,,,,,,,A/L +29/12/21,,,NO ONCALL,,,,Mat leave,,,,,,,A/L,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,,,,,,OFF,,,,,,,,,,,,,,,,A/L +30/12/21,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,,,,,,OFF,,,,,,,,,,,,,,,,A/L +31/12/21,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,,OOPT,,,,,,,,,OFF,,,,,,,,,,,,,,,,A/L +1/1/22,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,OOPT,,,,,,,,,OFF,,,,,,,,,,,,,,,,A/L +2/1/22,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,OOPT,,,,,,,,,OFF,,,,,,,,,,,,,,,,A/L +3/1/22,,,NO ONCALL,,,,Mat leave,,,,,,,,A/L,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,OOPT,,,,,A/L,,,,OFF,,,,,,,,,,,,,,,,A/L +4/1/22,,,NO ONCALL,,,,Mat leave,,,,,A/L,,,A/L,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,OOPT,,,,,A/L,,,,OFF,,,,,,,,,,,,,,,,A/L +5/1/22,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,OOPT,,,,,A/L,,,,,,,,,,,,,,,,,,,,A/L +6/1/22,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,OOPT,,,,,A/L,,,,,,,,,,,,,,,,,,,,A/L +7/1/22,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,OOPT,,,,,A/L,,,,,,,,,,,,,,,,,,,,A/L +8/1/22,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,OOPT,,,,,A/L,,,,,,,,,,,,,,,A/L,,,,,A/L +9/1/22,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,OOPT,,,,,A/L,,,,,,,,,,,,,,,A/L,,,,,A/L +10/1/22,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,OOPT,,,,,,,,,,,,,,,,,,,,A/L,,,,, +11/1/22,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,OOPT,,,,,,,,,,,,,,,,,,,,A/L,,,,, +12/1/22,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,OOPT,,,,,,,,,,,,,,,,,,,,A/L,,,,, +13/1/22,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,OOPT,,,,,,,,,,,,,,,,,,,,A/L,,,,, +14/1/22,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,OOPT,,,,,,,,,,,,,,,,,,,,A/L,,,,, +15/1/22,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,OOPT,,,,,,,,,,,,,,,,,,,,A/L,,,,, +16/1/22,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,OOPT,,,,,,,,,,,,,,,,,,,,A/L,,,,, +17/1/22,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,OOPT,,,,,,,,,,,,,,,,,,,,,,,,, +18/1/22,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,OOPT,,,,,,,,,,,,,,,,,,,,,,,,, +19/1/22,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,OOPT,,,,,,,,,,,,,,,,,,,,,,,,, +20/1/22,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,OOPT,,,,,,,,,,,,,,,,,,,,,,,,, +21/1/22,,,NO ONCALL,,A/L,,Mat leave,,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,OOPT,,,,,,,,,,,,A/L,,,,,,,,,,,,, +22/1/22,,,NO ONCALL,,A/L,,Mat leave,,A/L,,,,,,,,,,,,,,No Oncall,,A/L,,Mat leave,,,OOPT,OOPT,,,,,,,,,,,,A/L,,,,,,,,,,,,, +23/1/22,,,NO ONCALL,,A/L,,Mat leave,,A/L,,,,,,,,,,,,,,No Oncall,,A/L,,Mat leave,,,OOPT,OOPT,,,,,,,,,,,,A/L,,,,,,,,,,,,, +24/1/22,,,NO ONCALL,,A/L,,Mat leave,,A/L,,,,,,,,,,,,,,No Oncall,,A/L,,Mat leave,,,OOPT,OOPT,,,,,,,,,,,,,,,,,,,,,,,,, +25/1/22,,,NO ONCALL,,,,Mat leave,,A/L,,,,,,,,,,,,,,No Oncall,,A/L,,Mat leave,,,OOPT,OOPT,,,,,,,,,,,,,,,,,,,,,,,,, +26/1/22,,,NO ONCALL,,,,Mat leave,,A/L,,,,,,,,,,,,,,No Oncall,,A/L,,Mat leave,,,OOPT,OOPT,,,,,,,,,,,,,,,,,,,,,,,,, +27/1/22,,,NO ONCALL,,,,Mat leave,,A/L,,,,,,,,,,,,,,No Oncall,,A/L,,Mat leave,,,OOPT,OOPT,,,,,,,,,,,,,,,,,,,,,,,,, +28/1/22,,,NO ONCALL,,,,Mat leave,,A/L,,A/L,,,,,,,,,,,,No Oncall,,A/L,,Mat leave,,,OOPT,OOPT,,,,,,,,,,,,,,,,,,,,,,,,, +29/1/22,,,NO ONCALL,,,,Mat leave,,A/L,,A/L,,,,,,,,,,,,No Oncall,,A/L,,Mat leave,,,OOPT,OOPT,,,,A/L,,,,,,,,,,,,,,,,,,,,, +30/1/22,,,NO ONCALL,,,,Mat leave,,A/L,,A/L,,,,,,,,,,,,No Oncall,,A/L,,Mat leave,,,OOPT,OOPT,,,,A/L,,,,,,,,,,,,,,,,,,,,, +31/1/22,,,NO ONCALL,,,,Mat leave,,,,A/L,,,,,,,,,,,,No Oncall,,A/L,,Mat leave,,,OOPT,OOPT,,,,A/L,,,,,,,,,,,,,,,,,,,,, +1/2/22,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,,No Oncall,,A/L,,Mat leave,,,OOPT,OOPT,,,,A/L,,,,,,,,,,,,,,,,A/L,,,,, +2/2/22,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,,No Oncall,,A/L,,Mat leave,,,OOPT,OOPT,,,,A/L,,,,,,,,,,,,,A/L,,,A/L,,,,, +3/2/22,,,NO ONCALL,,,,Mat leave,,,,,,,,,,,,,,,,No Oncall,,A/L,,Mat leave,,,OOPT,OOPT,,,,A/L,,,,,,,,,,,,,A/L,,,A/L,,,,, +4/2/22,,,NO ONCALL,,,,Mat leave,,,,,CCT,,,,,,,,,,,No Oncall,,A/L,,Mat leave,,,OOPT,OOPT,,,,A/L,,,,,,,,,,,,,A/L,,,A/L,,,,, +5/2/22,,,NO ONCALL,,,,Mat leave,,,,,CCT,,,,,,,,,,,No Oncall,,A/L,,Mat leave,,,OOPT,OOPT,,,,A/L,,,,,,,,,,,,,A/L,,,,A/L,,,, +6/2/22,,,NO ONCALL,,,,Mat leave,,,,,CCT,,,,,,,,,,,No Oncall,,A/L,,Mat leave,,,OOPT,OOPT,,,,A/L,,,,,,,,,,,,,A/L,,,,A/L,,,, +7/2/22,,,NO ONCALL,,,,Mat leave,,,,,CCT,,,,,,,,,,,No Oncall,,A/L,,Mat leave,,,OOPT,OOPT,,,,A/L,,,,,,,,,,,,,,,,,A/L,,,, +8/2/22,,,NO ONCALL,,,,Mat leave,,,,,CCT,,,,,,,,,,,No Oncall,,A/L,,Mat leave,,,OOPT,OOPT,,,,A/L,,,,,,,,,,,,,,,,,A/L,,,, +9/2/22,,,NO ONCALL,,,,Mat leave,,,,,CCT,,,,,,,,,,,No Oncall,,A/L,,Mat leave,,,OOPT,OOPT,,,,A/L,,,,,,,,,,,,,,,,,A/L,,,, +10/2/22,,,NO ONCALL,,,,Mat leave,,,,,CCT,,,,,,,,,,,No Oncall,,A/L,,Mat leave,,,OOPT,OOPT,,,,A/L,,,,,,,,,,,,,,,,,A/L,,,, +11/2/22,,,NO ONCALL,,,,Mat leave,,,,,CCT,,,,,,,,,,,No Oncall,,A/L,,Mat leave,,,OOPT,OOPT,,,,A/L,,,,,,,,,,,,,,,,,A/L,,,, +12/2/22,,,NO ONCALL,,,,Mat leave,,,,,CCT,,,,,,,,,,,No Oncall,,A/L,,Mat leave,,,OOPT,OOPT,,,,A/L,,,,,,,,,,,,,,,,,A/L,,,, +13/2/22,,,NO ONCALL,,,,Mat leave,,,,,CCT,,,,,,,,,,,No Oncall,,A/L,,Mat leave,,,OOPT,OOPT,,,,A/L,,,,,,,,,,,,,,,,,A/L,,,, +14/2/22,,,NO ONCALL,,,,Mat leave,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,OOPT,,,,,,,,,,,,,,,,,,,,,,,,, +15/2/22,,,NO ONCALL,,,,Mat leave,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,OOPT,,,,,,,,,,,,,,,,,,,,,,,,, +16/2/22,,,NO ONCALL,,,,Mat leave,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,OOPT,,,,,,,,,,,,,,,,,,,,,,,,, +17/2/22,,,NO ONCALL,,,,Mat leave,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,OOPT,,,,,,,,,,,,,,,,,,,,,,,,, +18/2/22,,,NO ONCALL,,,,Mat leave,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,OOPT,,,,,,,,,,,,,A/L,,A/L,,A/L,,,,,,,, +19/2/22,,,NO ONCALL,,,,Mat leave,,,,,CCT,,,A/L,,,,,,A/L,,No Oncall,,,,Mat leave,,,OOPT,OOPT,,,A/L,,,,,,A/L,,,,A/L,,A/L,,A/L,,,,,,,, +20/2/22,,,NO ONCALL,,,,Mat leave,,,,,CCT,,,A/L,,,,,,A/L,,No Oncall,,,,Mat leave,,,OOPT,OOPT,,,A/L,,,,,,A/L,,,,A/L,,A/L,,A/L,,,,,,,, +21/2/22,,,NO ONCALL,,,,Mat leave,,,,,CCT,,,A/L,,,,,,A/L,,No Oncall,,,,Mat leave,,,OOPT,OOPT,,,A/L,,,,,,A/L,,,,,,A/L,,,,,,,,,, +22/2/22,,,NO ONCALL,,,,Mat leave,,,,,CCT,,,A/L,,,,,,A/L,,No Oncall,,,,Mat leave,,,OOPT,OOPT,,,A/L,,,,,,A/L,,,,,,A/L,,,,,,,,,, +23/2/22,,,NO ONCALL,,,,Mat leave,,,,,CCT,,,A/L,,,,,,A/L,,No Oncall,,,,Mat leave,,,OOPT,OOPT,,,A/L,,,,,,A/L,,,,,,A/L,,,,,,,,,, +24/2/22,,,NO ONCALL,,,,Mat leave,,,,,CCT,,,A/L,,,,,,A/L,,No Oncall,,,,Mat leave,,,OOPT,OOPT,,,A/L,,,,,,A/L,,,,,,A/L,,,,,,,,,, +25/2/22,,,NO ONCALL,,,,Mat leave,,,,,CCT,,,A/L,,,,,,A/L,,No Oncall,,,,Mat leave,,,OOPT,OOPT,,,A/L,,,,,,A/L,,,,,,,,,,,A/L,,,,, +26/2/22,,,NO ONCALL,,,,Mat leave,,,,,CCT,,,A/L,,,,,,A/L,,No Oncall,,,,Mat leave,,,OOPT,OOPT,,,A/L,,,,,,A/L,,,,,,,,,,,A/L,,,,, +27/2/22,,,NO ONCALL,,,,Mat leave,,,,,CCT,,,A/L,,,,,,A/L,,No Oncall,,,,Mat leave,,,OOPT,OOPT,,,A/L,,,,,,A/L,,,,,,,,,,,A/L,,,,, +28/2/22,,,NO ONCALL,,,,Mat leave,,,,,CCT,,,,,,,,,A/L,,No Oncall,,,,Mat leave,,,OOPT,OOPT,,,,,,,,,,,,,,,,,,,,A/L,,,,, +1/3/22,,,,,,,Mat leave,,,,,CCT,,,,,,,,,A/L,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,,,,,A/L,,,,, +2/3/22,,,,,,,,,,,,CCT,,,,,,,,,A/L,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,,,,,A/L,,,,, +3/3/22,,,,,,,,,,,,CCT,,,,,,,,,A/L,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,,,,,A/L,,,,, +4/3/22,,,,,,,,,,,,CCT,,,,,,,,,A/L,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,,,,,A/L,,,,, +5/3/22,,,,,,,,,,,,CCT,,,,,,,,,A/L,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,,,,,A/L,,,,, +6/3/22,,,,,,,,,,,,CCT,,,,,,,,,A/L,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,,,,,A/L,,,,, +7/3/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +8/3/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +9/3/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +10/3/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +11/3/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,A/L,,,,,,,,,, +12/3/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,A/L,,,,,,,,,, +13/3/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,A/L,,,,,,,,,, +14/3/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,A/L,,,,,,,,,, +15/3/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,A/L,,,,,,,,,, +16/3/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,A/L,,,,,,,,,, +17/3/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,A/L,,,,,,,,,, +18/3/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,A/L,,,,,,,,,, +19/3/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,A/L,,,,,,,,,,A/L,,,,,,,,,, +20/3/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,A/L,,,,,,,,,,A/L,,,,,,,,,, +21/3/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,A/L,,,,,,,,,,A/L,,,,,,,,,, +22/3/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,A/L,,,,,,,,,,,,,,,,,,,, +23/3/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,A/L,,,,,,,,,,,,,,,,,,,, +24/3/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,A/L,,,,,,,,,,,,,,,,,,,, +25/3/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,A/L,,,,,,,,,,,,,,,,,,,, +26/3/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,A/L,,,,,,,,,,,,,,,,,,,, +27/3/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,A/L,,,,,,,,,,,,,,,,,,,, +28/3/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +29/3/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +30/3/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +31/3/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +1/4/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +2/4/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,A/L,,,,,,,,,,,,, +3/4/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,A/L,,,,,,,,,,,,, +4/4/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +5/4/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +6/4/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +7/4/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +8/4/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +9/4/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +10/4/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +11/4/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +12/4/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +13/4/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +14/4/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +15/4/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +16/4/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +17/4/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +18/4/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +19/4/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +20/4/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +21/4/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +22/4/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +23/4/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +24/4/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +25/4/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +26/4/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +27/4/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +28/4/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +29/4/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +30/4/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +1/5/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +2/5/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +3/5/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +4/5/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +5/5/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +6/5/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +7/5/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +8/5/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +9/5/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +10/5/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +11/5/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +12/5/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +13/5/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +14/5/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +15/5/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +16/5/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +17/5/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +18/5/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +19/5/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +20/5/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +21/5/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +22/5/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +23/5/22,,,,,,,,,,,,CCT,,,,A/L,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +24/5/22,,,,,,,,,,,,CCT,,,,A/L,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +25/5/22,,,,,,,,,,,,CCT,,,,A/L,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +26/5/22,,,,,,,,,,,,CCT,,,,A/L,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +27/5/22,,,,,,,,,,,,CCT,,,,A/L,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +28/5/22,,,,,,,,,,,,CCT,,,,A/L,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +29/5/22,,,,,,,,,,,,CCT,,,,A/L,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +30/5/22,,,,,,,,,,,,CCT,,,,A/L,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +31/5/22,,,,,,,,,,,,CCT,,,,A/L,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +1/6/22,,,,,,,,,,,,CCT,,,,A/L,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +2/6/22,,,,,,,,,,,,CCT,,,,A/L,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +3/6/22,,,,,,,,,,,,CCT,,,,A/L,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +4/6/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +5/6/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +6/6/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +7/6/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +8/6/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +9/6/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +10/6/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +11/6/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +12/6/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +13/6/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +14/6/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +15/6/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +16/6/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +17/6/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +18/6/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +19/6/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +20/6/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +21/6/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +22/6/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +23/6/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +24/6/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +25/6/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +26/6/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +27/6/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +28/6/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +29/6/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +30/6/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +1/7/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +2/7/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +3/7/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +4/7/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +5/7/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +6/7/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +7/7/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +8/7/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +9/7/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +10/7/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +11/7/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +12/7/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +13/7/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +14/7/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +15/7/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +16/7/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +17/7/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +18/7/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +19/7/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +20/7/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +21/7/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +22/7/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +23/7/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +24/7/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +25/7/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +26/7/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +27/7/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +28/7/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +29/7/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,A/L,,,,,,,,,,,, +30/7/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,A/L,,,,,,,,,,,, +31/7/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,A/L,,,,,,,,,,,, +1/8/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +2/8/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +3/8/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +4/8/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +5/8/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +6/8/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +7/8/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +8/8/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +9/8/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +10/8/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +11/8/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +12/8/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +13/8/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +14/8/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +15/8/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +16/8/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +17/8/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +18/8/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +19/8/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +20/8/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +21/8/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +22/8/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +23/8/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +24/8/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +25/8/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +26/8/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +27/8/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +28/8/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +29/8/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +30/8/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +31/8/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +1/9/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +2/9/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +3/9/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, +4/9/22,,,,,,,,,,,,CCT,,,,,,,,,,,No Oncall,,,,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,,, \ No newline at end of file diff --git a/leave.py b/leave.py index 3bc9ab2..24a2dd7 100644 --- a/leave.py +++ b/leave.py @@ -1,16 +1,19 @@ import csv +import re + +date_re = r"[\d]{1,2}\/[\d]{1,2}\/[\d]{2}" def load_leave(Rota, use_live_rota): - file_name="leave.csv" + file_name = "leave.csv" with open(file_name, newline="") as f: shifts = Rota.get_shift_names() - + workers = {} - reader = csv.reader(f, delimiter=',', quotechar='"') + reader = csv.reader(f, delimiter=",", quotechar='"') leave = {} requests = {} @@ -32,66 +35,74 @@ def load_leave(Rota, use_live_rota): workers[name]["leave"] = [] workers[name]["requests"] = [] workers[name]["site_pref"] = [] + workers[name]["shift_balance_extra"] - for i in range(len(r)): try: a = order[i] except IndexError: continue - + + worker = workers[order[i]] + lower_item = r[i].lower() if lower_item == "derriford": lower_item = "plymouth" - + if lower_item == "derriford twilights": lower_item = "plymouth_twilights" - + if row_title == "PROC site": - workers[order[i]]["site_pref"] = lower_item - + worker["site_pref"] = lower_item + if row_title == "Rotation": - workers[order[i]]["site"] = lower_item - + worker["site"] = lower_item + elif row_title == "Grade": - workers[order[i]]["grade"] = lower_item - + worker["grade"] = lower_item + elif row_title == "%FTE": - workers[order[i]]["fte"] = lower_item - + worker["fte"] = lower_item + elif row_title == "NWD": - workers[order[i]]["nwd"] = lower_item - + worker["nwd"] = lower_item + elif row_title == "Flexible NWD": - workers[order[i]]["flexible_nwd"] = lower_item - + worker["flexible_nwd"] = lower_item + elif row_title == "End Date": - workers[order[i]]["end_date"] = lower_item - + worker["end_date"] = lower_item + elif row_title == "OOP": - workers[order[i]]["oop"] = lower_item - + worker["oop"] = lower_item + elif row_title == "Group": - workers[order[i]]["group"] = lower_item + worker["group"] = lower_item elif row_title == "Pair": if lower_item == "": - workers[order[i]]["pair"] = 0 + worker["pair"] = 0 else: - workers[order[i]]["pair"] = int(lower_item) + worker["pair"] = int(lower_item) - elif n > 12: + elif row_title.startswith("Extra_"): + if lower_item: + shift = row_title[len("Extra_") :] + worker["shift_balance_extra"] = shift + + elif re.match(date_re, row_title) is not None: if lower_item != "": # This may be easier to do as a dict if lower_item in shifts: - workers[order[i]]["requests"].append((row[0], lower_item)) + worker["requests"].append((row[0], lower_item)) else: - workers[order[i]]["leave"].append((row[0], lower_item)) + worker["leave"].append((row[0], lower_item)) n = n + 1 return workers -#load_leave() \ No newline at end of file + +# load_leave() diff --git a/old_rota.csv b/old_rota.csv new file mode 100644 index 0000000..410e93e --- /dev/null +++ b/old_rota.csv @@ -0,0 +1,186 @@ +Name,,Madalina Drumea,Layla Bell,Stephanie Bailey,Salma Aslam,Alex wood,Max Ireland,Seren Peters,Charles Finan,Paul Ward,Delilah Trimmer,Matt Murphey,Tom Welsh,Kyaw Tint,Maththew O'Brien,Max Finzel,Zainab Sharaf,Jean Skumar,Michael Tomek,Dhuvresh Patel,Nicolas Dziadulewicz,Vilim Kalamar,Jenna Millington,Georgina Edwards,Jenn Haw fong,Paul Jenkins,Rebecca Murphy,Sophie McGlade,Amoolya Mannava,Ross Kruger,Fiona Lyall,Jon Skinner,Andrew MacCormick,Joel Lim,Mark Haley,Wijhdan Abusrewil,Alexander Sanchez - cabello,Chong Yew Ng,Matthew Thorley,Sayed Hashim Alqarooni,Harriet Conley,Alexander Wijnberg,Cameron Bullock,Alan Eccles,Christian Greer,Hannah Lewis,Amina Odeh,Sarath Vennam,Mo Babsail,Richard Chaytor,Sherafghan +Site,,barnstaple,exeter,exeter,exeter,exeter,exeter,exeter,exeter,exeter,exeter,exeter,exeter,plymouth,plymouth,plymouth,plymouth,plymouth,plymouth,plymouth,plymouth,plymouth,plymouth,plymouth,plymouth,plymouth,plymouth,plymouth,plymouth,plymouth,plymouth_twilights,plymouth_twilights,torbay,torbay,torbay,torbay,torbay,torbay,torbay,torbay,torbay,truro,truro,truro,truro,truro,truro,truro,truro,truro,truro +Grade,,3,2,2,3,3,3,3,4,4,5,5,5,2,2,2,2,3,3,3,3,3,4,4,4,4,5,5,5,5,6,6,2,2,2,2,3,4,4,4,5,2,2,3,3,3,4,4,5,5,5 +FTE,,100,100,100,60,100,100,100,100,100,60,100,100,100,100,100,100,60,80,100,100,100,60,80,100,100,100,80,100,100,60,100,100,100,100,100,100,90,100,100,60,100,100,80,100,100,100,100,100,100,100 +Week 1 Day Mon,9/6/21,,,,,,night,,exeter_twilight,,,,night,,,,,,,,plymouth_twilight,,,,,,,,,,,,,,,,,,torbay_twilight,,,,,,night,,,truro_twilight,,, +Week 1 Day Tue,9/7/21,,,,,,night,,,,,exeter_twilight,night,,,,,,,,,,,,plymouth_twilight,,,plymouth_twilight,,,,,,,,,,,torbay_twilight,,,,,,night,,,truro_twilight,,, +Week 1 Day Wed,9/8/21,,exeter_twilight,,,,night,,,,,,night,,,,,,,,,plymouth_twilight,,,,plymouth_twilight,,,,,,,,torbay_twilight,,,,,,,,,,,night,truro_twilight,,,,, +Week 1 Day Thu,9/9/21,,,,,exeter_twilight,night,,,,,,night,,,,,,plymouth_twilight,,,,,plymouth_twilight,,,,,plymouth_twilight,,,,,torbay_twilight,,,,,,,,truro_twilight,,,night,,,,,, +Week 1 Day Fri,9/10/21,,,,,,,,,weekend_exeter,night,,,,,,,,,plymouth_twilight,,night,,,,,,,,plymouth_twilight,,,,,,,,,,weekend_torbay,,,weekend_truro,,,,night,,,, +Week 1 Day Sat,9/11/21,,,,,,,,,weekend_exeter,night,,,,,,,,,,,night,,,weekend_plymouth2,,,,weekend_plymouth1,,,,,,,,,,,weekend_torbay,,,weekend_truro,,,,night,,,, +Week 1 Day Sun,9/12/21,,,,,,,,,weekend_exeter,night,,,,,plymouth_twilight,,,,,plymouth_twilight,night,,,weekend_plymouth2,,,,weekend_plymouth1,,,,,,,,,,,weekend_torbay,,,weekend_truro,,,,night,,,, +Week 2 Day Mon,9/13/21,,,,,exeter_twilight,,,,,,night,,plymouth_twilight,,,,,,,,,,,,,,,,night,,,,,,torbay_twilight,,,,,,truro_twilight,,,,night,,,,, +Week 2 Day Tue,9/14/21,,,,,,,exeter_twilight,,,,night,,,,,,,,,,,,plymouth_twilight,,,,,,night,,,,,,torbay_twilight,,,,,,,,,,night,,truro_twilight,,, +Week 2 Day Wed,9/15/21,,,,,,,,,,exeter_twilight,night,,plymouth_twilight,,,,,,,,,,,,,,,,night,,,,,,torbay_twilight,,,,,,,,,truro_twilight,night,,,,, +Week 2 Day Thu,9/16/21,,,,,,,,,exeter_twilight,,night,,,plymouth_twilight,,,,,,,,,,,,,,,night,,,,,,,,,,torbay_twilight,,,,,,night,truro_twilight,,,, +Week 2 Day Fri,9/17/21,,,,,night,weekend_exeter,,,,,,,,,,plymouth_twilight,,,night,,,,,,plymouth_twilight,,,,,,,,weekend_torbay,,,,,,,,,,,,,,,night,,weekend_truro +Week 2 Day Sat,9/18/21,,,,,night,weekend_exeter,,,,,,,,weekend_plymouth2,,,,weekend_plymouth1,night,,,,,,,,,,,,,,weekend_torbay,,,,,,,,,,,,,,,night,,weekend_truro +Week 2 Day Sun,9/19/21,,,,,night,weekend_exeter,,,,,,,,weekend_plymouth2,,,,weekend_plymouth1,night,,,,,,,,,,,,,,weekend_torbay,,,,,,,,,,,,,,,night,,weekend_truro +Week 3 Day Mon,9/20/21,,,exeter_twilight,,,,,,,,,,,,plymouth_twilight,,,,,,night,,,,,,,,,,,,,,torbay_twilight,night,,,,,,,,truro_twilight,,,,,night, +Week 3 Day Tue,9/21/21,,,,,,,exeter_twilight,,,,,,,,,,,,,,night,,,,plymouth_twilight,,,,,,,,,,torbay_twilight,night,,,,,,truro_twilight,,,,,,,night, +Week 3 Day Wed,9/22/21,,,,,,,,,,,exeter_twilight,,,,,,,,,,night,,plymouth_twilight,,,,,,,,,,,,torbay_twilight,night,,,,,,,,,,,,truro_twilight,night, +Week 3 Day Thu,9/23/21,,,,,exeter_twilight,,,,,,,,,,,,,plymouth_twilight,,,night,,,,,,,,,,,,,torbay_twilight,,night,,,,,,,,,truro_twilight,,,,night, +Week 3 Day Fri,9/24/21,night,,,,,,,,,,,weekend_exeter,,plymouth_twilight,,,,,,,,,,,,,night,,,,,weekend_torbay,,,,,,,,,weekend_truro,,,night,,,,,, +Week 3 Day Sat,9/25/21,night,,,,,,,,,,,weekend_exeter,,,,weekend_plymouth2,,,,,,,,,weekend_plymouth1,,night,,,,,weekend_torbay,,,,,,,,,weekend_truro,,,night,,,,,, +Week 3 Day Sun,9/26/21,night,,,,,,,,,,,weekend_exeter,,,,weekend_plymouth2,,,,,,,,,weekend_plymouth1,,night,,,,,weekend_torbay,,,,,,,,,weekend_truro,,,night,,,,,, +Week 4 Day Mon,9/27/21,,,exeter_twilight,,night,,,,,,,,,,,,,,,night,,,,,,,,,plymouth_twilight,,,,torbay_twilight,,,,,,,,,,,,truro_twilight,,,night,, +Week 4 Day Tue,9/28/21,,exeter_twilight,,,night,,,,,,,,,plymouth_twilight,,,,,,night,,,,,,,,,,,,,torbay_twilight,,,,,,,,,,,,,,,night,,truro_twilight +Week 4 Day Wed,9/29/21,,,,,night,,exeter_twilight,,,,,,,,,plymouth_twilight,,,,night,,,,,,,,,,,,,torbay_twilight,,,,,,,,,,,truro_twilight,,,,night,, +Week 4 Day Thu,9/30/21,,,,,night,,exeter_twilight,,,,,,,plymouth_twilight,,,,,,night,,,,,,,,,,,,,torbay_twilight,,,,,,,,truro_twilight,,,,,,,night,, +Week 4 Day Fri,10/1/21,,,,,,night,,,,,weekend_exeter,,,,,plymouth_twilight,,,,,,,,,,,,night,,,,,,weekend_torbay,,,,,,,,,,,night,,,,,weekend_truro +Week 4 Day Sat,10/2/21,,,,,,night,,,,,weekend_exeter,,,weekend_plymouth1,,,weekend_plymouth2,,,,,,,,,,,night,,,,,,weekend_torbay,,,,,,,,,,,night,,,,,weekend_truro +Week 4 Day Sun,10/3/21,,,,,,night,,,,,weekend_exeter,,,weekend_plymouth1,,,weekend_plymouth2,,,,,,,,,,,night,,,,,,weekend_torbay,,,,,,,,,,,night,,,,,weekend_truro +Week 5 Day Mon,10/4/21,,exeter_twilight,,,,,night,,,,,,,,,night,,,,,,,,,plymouth_twilight,,,,,,,,,,torbay_twilight,,,,,,truro_twilight,,,,,,,,night, +Week 5 Day Tue,10/5/21,,,exeter_twilight,,,,night,,,,,,,,,night,,,,,plymouth_twilight,,,,,,,,,,,,,,torbay_twilight,,,,,,,truro_twilight,,,,,,,night, +Week 5 Day Wed,10/6/21,,,,,,,night,,,,,exeter_twilight,,,,night,plymouth_twilight,,,,,,,,,,,,,,,torbay_twilight,,,,,,,,,truro_twilight,,,,,,,,night, +Week 5 Day Thu,10/7/21,,,,,,exeter_twilight,night,,,,,,,plymouth_twilight,,night,,,,,,,,,,,,,,,,torbay_twilight,,,,,,,,,,truro_twilight,,,,,,,night, +Week 5 Day Fri,10/8/21,,night,,,weekend_exeter,,,,,,,,,,,,plymouth_twilight,,,,,,night,,,,,,,,,weekend_torbay,,,,night,,,,,,,,weekend_truro,,,,,, +Week 5 Day Sat,10/9/21,,night,,,weekend_exeter,,,,,,,,,,,,,,,weekend_plymouth2,weekend_plymouth1,,night,,,,,,,,,,,,weekend_torbay,night,,,,,,,,weekend_truro,,,,,, +Week 5 Day Sun,10/10/21,,night,,,weekend_exeter,,,,,,,,,,,,,,,weekend_plymouth2,weekend_plymouth1,,night,,,,,,,,,,,,weekend_torbay,night,,,,,,,,weekend_truro,,,,,, +Week 6 Day Mon,10/11/21,,,,,,night,,exeter_twilight,,,,,,night,,,,,,,,,,,,,,,plymouth_twilight,,,,,torbay_twilight,,,night,,,,,truro_twilight,,,,,,,, +Week 6 Day Tue,10/12/21,,,,,,night,,,,,exeter_twilight,,,night,,plymouth_twilight,,,,,,,,,,,,,,,,,,torbay_twilight,,,night,,,,,,,,truro_twilight,,,,, +Week 6 Day Wed,10/13/21,,,exeter_twilight,,,night,,,,,,,,night,,,,,,,,,,plymouth_twilight,,,,,,,,,,torbay_twilight,,,night,,,,,,,truro_twilight,,,,,, +Week 6 Day Thu,10/14/21,,,,,exeter_twilight,night,,,,,,,,night,,,,,,,,,plymouth_twilight,,,,,,,,,,,torbay_twilight,,,night,,,,,,,,,,truro_twilight,,, +Week 6 Day Fri,10/15/21,,,weekend_exeter,,,,,,,,,,,,,,,plymouth_twilight,,,,,,,night,,,,,,,weekend_torbay,night,,,,,,,,,,,,night,,,weekend_truro,, +Week 6 Day Sat,10/16/21,,,weekend_exeter,,,,,,,,,,weekend_plymouth1,,,weekend_plymouth2,,,,,,,,,night,,,,,,,weekend_torbay,night,,,,,,,,,,,,night,,,weekend_truro,, +Week 6 Day Sun,10/17/21,,,weekend_exeter,,,,,,,,,,weekend_plymouth1,,,weekend_plymouth2,,,,,,,,,night,,,,,,,weekend_torbay,night,,,,,,,,,,,,night,,,weekend_truro,, +Week 7 Day Mon,10/18/21,,,,,,,,exeter_twilight,,,,,,,,,,night,,,,,,,,,plymouth_twilight,,,,,,,night,,,,,torbay_twilight,,,,,,,,night,,,truro_twilight +Week 7 Day Tue,10/19/21,,,,,,exeter_twilight,,,,,,,,,,,,night,,plymouth_twilight,,,,,,,,,,,,,,night,,,,,torbay_twilight,,,,,,,,night,,truro_twilight, +Week 7 Day Wed,10/20/21,,,,,,,,exeter_twilight,,,,,,,,,,night,plymouth_twilight,,,,,,,,,,,,,,,night,,,,,torbay_twilight,,,,truro_twilight,,,,night,,, +Week 7 Day Thu,10/21/21,,,,,,,,,,,,exeter_twilight,,,,,,night,,,,,,,,,,,plymouth_twilight,,,,,night,,,,,torbay_twilight,,,,,,,,night,truro_twilight,, +Week 7 Day Fri,10/22/21,,,,,,,weekend_exeter,,night,,,,plymouth_twilight,,,,,,,,,,,night,,,,,,,,,,,,,weekend_torbay,,,,night,,,,,,,weekend_truro,, +Week 7 Day Sat,10/23/21,,,,,,,weekend_exeter,,night,,,,,,weekend_plymouth1,,,,,weekend_plymouth2,,,,night,,,,,,,,,,,,,weekend_torbay,,,,night,,weekend_truro,,,,,,, +Week 7 Day Sun,10/24/21,,,,,,,weekend_exeter,,night,,,,,,weekend_plymouth1,,,,,weekend_plymouth2,,,,night,,,,,,,,,,,,,weekend_torbay,,,,night,,weekend_truro,,,,,,, +Week 8 Day Mon,10/25/21,,exeter_twilight,,,night,,,,,,,,,,,,,,,,,,plymouth_twilight,,,,,,night,,,,torbay_twilight,,night,,,,,,,,,,truro_twilight,,,,, +Week 8 Day Tue,10/26/21,,exeter_twilight,,,night,,,,,,,,,,,,,,,,,,,,plymouth_twilight,,,,night,,,,torbay_twilight,,night,,,,,,,,,,,,,,,truro_twilight +Week 8 Day Wed,10/27/21,,,,,night,exeter_twilight,,,,,,,,,,,plymouth_twilight,,,,,,,,,,,,night,,,,torbay_twilight,,night,,,,,,,,,,,,truro_twilight,,, +Week 8 Day Thu,10/28/21,,,,,night,,exeter_twilight,,,,,,,,,,,,,,,,,plymouth_twilight,,,,,night,,,,torbay_twilight,,night,,,,,,,,,,truro_twilight,,,,, +Week 8 Day Fri,10/29/21,,,weekend_exeter,,,,,,,,night,,night,,,,,,,plymouth_twilight,,,,,,,,,,,,,,,,weekend_torbay,,,,,,,,,,,weekend_truro,night,, +Week 8 Day Sat,10/30/21,,,weekend_exeter,,,,,,,,night,,night,,,,,,weekend_plymouth2,,weekend_plymouth1,,,,,,,,,,,,,,,weekend_torbay,,,,,,,,,,,weekend_truro,night,, +Week 8 Day Sun,10/31/21,,,weekend_exeter,,,,,,,,night,,night,,,,,,weekend_plymouth2,,weekend_plymouth1,,,,,,,,,,,,,,,weekend_torbay,,,,,,,,,,,weekend_truro,night,, +Week 9 Day Mon,11/1/21,,,,,,,,exeter_twilight,,,,,,,,,,,,,,,,,,,plymouth_twilight,night,,,,,night,torbay_twilight,,,,,,,,truro_twilight,,,,night,,,, +Week 9 Day Tue,11/2/21,,exeter_twilight,,,,,,,,,,,,,,,,,,,,,,,,,,night,plymouth_twilight,,,,night,,,,,,,torbay_twilight,,,truro_twilight,,,night,,,, +Week 9 Day Wed,11/3/21,,,exeter_twilight,,,,,,,,,,,,,,,,,,,,,,plymouth_twilight,,,night,,,,,night,,,,,,,torbay_twilight,,,,,,night,,,truro_twilight, +Week 9 Day Thu,11/4/21,,,,,,,,,,exeter_twilight,,,,,,,,,,,,,,,,,,night,plymouth_twilight,,,,night,torbay_twilight,,,,,,,truro_twilight,,,,,night,,,, +Week 9 Day Fri,11/5/21,,,,,,,,night,,,,weekend_exeter,,night,,,,,,,,,,,,,,,,,,weekend_torbay,,,,,,night,,,,,,,,,,,weekend_truro, +Week 9 Day Sat,11/6/21,,,,,,,,night,,,,weekend_exeter,,night,weekend_plymouth1,,,,,,,,,,weekend_plymouth2,,,,,,,weekend_torbay,,,,,,night,,,,,,,,,,,weekend_truro, +Week 9 Day Sun,11/7/21,,,,,,,,night,,,,weekend_exeter,,night,weekend_plymouth1,,,,,,,,,,weekend_plymouth2,,,,,,,weekend_torbay,,,,,,night,,,,,,,,,,,weekend_truro, +Week 10 Day Mon,11/8/21,,,night,,,,,,,,exeter_twilight,,,,,,,,,,,,,,,,night,plymouth_twilight,,,,,,torbay_twilight,,,,,,,,,night,,,,,truro_twilight,, +Week 10 Day Tue,11/9/21,,,night,,,,,,,,exeter_twilight,,,,,plymouth_twilight,,,,,,,,,,,night,,,,,,,,,,,,torbay_twilight,,,,night,,,,,truro_twilight,, +Week 10 Day Wed,11/10/21,,,night,,,,,,,exeter_twilight,,,,,,,,,,,,,,,,,night,plymouth_twilight,,,,,,,,,,,torbay_twilight,,,,night,,,truro_twilight,,,, +Week 10 Day Thu,11/11/21,,exeter_twilight,night,,,,,,,,,,,,,,,,,,,,,,,,night,,,,,,,,,,,,torbay_twilight,,,,night,,,truro_twilight,,,, +Week 10 Day Fri,11/12/21,,,,,,,,,,weekend_exeter,,,,,plymouth_twilight,,,,,,,,,,,,,,night,,,,,weekend_torbay,,,,,,night,,night,,,,,,,,weekend_truro +Week 10 Day Sat,11/13/21,,,,,,,,,,weekend_exeter,,,,,,weekend_plymouth1,,,,,,,,,,,,weekend_plymouth2,night,,,,,weekend_torbay,,,,,,night,,night,,,,,,,,weekend_truro +Week 10 Day Sun,11/14/21,,,,,,,,,,weekend_exeter,,,,,,weekend_plymouth1,,,,,,,,,,,,weekend_plymouth2,night,,,,,weekend_torbay,,,,,,night,,night,,,,,,,,weekend_truro +Week 11 Day Mon,11/15/21,,,exeter_twilight,,,,,,,,,,,,night,,,,,,,,,,,,,,,,,torbay_twilight,,,,,,,night,,,,,,,truro_twilight,,night,, +Week 11 Day Tue,11/16/21,,,,,,,,,,,,exeter_twilight,,,night,,,,,,plymouth_twilight,,,,,,,,,,,torbay_twilight,,,,,,,night,,,,,,,,,night,truro_twilight, +Week 11 Day Wed,11/17/21,,,,,,,,,,,exeter_twilight,,,,night,,,,,,,,,,,,,,,plymouth_twilight,,torbay_twilight,,,,,,,night,,,,,,,,,night,,truro_twilight +Week 11 Day Thu,11/18/21,,,,,,exeter_twilight,,,,,,,,,night,,,,,,plymouth_twilight,,,,,,,,,,,torbay_twilight,,,,,,,night,,,,,,,,,night,truro_twilight, +Week 11 Day Fri,11/19/21,,,weekend_exeter,,,,,night,,,,,,,,,,night,,,,,,,,,,,,,,,,,,,weekend_torbay,,,,,,,night,,weekend_truro,,,, +Week 11 Day Sat,11/20/21,,,weekend_exeter,,,,,night,,,,,weekend_plymouth2,,,,,night,,,,,,,,,weekend_plymouth1,,,,,,,,,,weekend_torbay,,,,,,,night,,weekend_truro,,,, +Week 11 Day Sun,11/21/21,,,weekend_exeter,,,,,night,,,,,weekend_plymouth2,,,,,night,,,,,,,,,weekend_plymouth1,,,,,,,,,,weekend_torbay,,,,,,,night,,weekend_truro,,,, +Week 12 Day Mon,11/22/21,,exeter_twilight,,,,,,,,,,,,plymouth_twilight,,,,,,,,,,night,,,,,,,,torbay_twilight,,,,,,night,,,night,truro_twilight,,,,,,,, +Week 12 Day Tue,11/23/21,,,,,,,exeter_twilight,,,,,,,,,,,,,,,,,night,plymouth_twilight,,,,,,,torbay_twilight,,,,,,night,,,night,,,,,,truro_twilight,,, +Week 12 Day Wed,11/24/21,,,,,,,,,exeter_twilight,,,,,,,,plymouth_twilight,,,,,,,night,,,,,,,,torbay_twilight,,,,,,night,,,night,,,truro_twilight,,,,,, +Week 12 Day Thu,11/25/21,,,,,,,,,,exeter_twilight,,,,,,,,,,,,,plymouth_twilight,night,,,,,,,,torbay_twilight,,,,,,night,,,night,,,truro_twilight,,,,,, +Week 12 Day Fri,11/26/21,,weekend_exeter,,,,,,,,,,night,,,,,,plymouth_twilight,,,night,,,,,,,,,,,,,,night,,,,weekend_torbay,,,,,,,,,,weekend_truro, +Week 12 Day Sat,11/27/21,,weekend_exeter,,,,,,,,,,night,,,,,,,,,night,,weekend_plymouth1,,,,,weekend_plymouth2,,,,,,,night,,,,weekend_torbay,,,,,,,,,,weekend_truro, +Week 12 Day Sun,11/28/21,,weekend_exeter,,,,,,,,,,night,,,,,,,,,night,,weekend_plymouth1,,,,,weekend_plymouth2,,,,,,,night,,,,weekend_torbay,,,,,,,,,,weekend_truro, +Week 13 Day Mon,11/29/21,night,,exeter_twilight,,,,,,,,,,,,,,,,,,,,,plymouth_twilight,night,,,,,,,,,torbay_twilight,,,,,,,,night,,,,truro_twilight,,,, +Week 13 Day Tue,11/30/21,night,,exeter_twilight,,,,,,,,,,,,,,plymouth_twilight,,,,,,,,night,,,,,,,,,torbay_twilight,,,,,,,,night,truro_twilight,,,,,,, +Week 13 Day Wed,12/1/21,night,,,,,,,exeter_twilight,,,,,,,,,,,,plymouth_twilight,,,,,night,,,,,,,,,torbay_twilight,,,,,,,,night,,,,,,,,truro_twilight +Week 13 Day Thu,12/2/21,night,,,,exeter_twilight,,,,,,,,,,,,,,plymouth_twilight,,,,,,night,,,,,,,,,torbay_twilight,,,,,,,,night,,,,,,,,truro_twilight +Week 13 Day Fri,12/3/21,,,,,,weekend_exeter,night,,,,,,,,night,plymouth_twilight,,,,,,,,,,,,,,,,,,,,,,weekend_torbay,,,,,,weekend_truro,,night,,,, +Week 13 Day Sat,12/4/21,,,,,,weekend_exeter,night,,,,,,,weekend_plymouth1,night,,,,weekend_plymouth2,,,,,,,,,,,,,,,,,,,weekend_torbay,,,,,,weekend_truro,,night,,,, +Week 13 Day Sun,12/5/21,,,,,,weekend_exeter,night,,,,,,,weekend_plymouth1,night,,,,weekend_plymouth2,,,,,,,,,,,,,,,,,,,weekend_torbay,,,,,,weekend_truro,,night,,,, +Week 14 Day Mon,12/6/21,,,,,,,,exeter_twilight,night,,,,night,,,,,,,,,,,,,,,plymouth_twilight,,,,,,,,torbay_twilight,,,,,truro_twilight,,,,night,,,,, +Week 14 Day Tue,12/7/21,,,,,exeter_twilight,,,,night,,,,night,,,,,,,,,,plymouth_twilight,,,,,,,,,,,,,torbay_twilight,,,,,,truro_twilight,,,night,,,,, +Week 14 Day Wed,12/8/21,,,,,,,,,night,exeter_twilight,,,night,,plymouth_twilight,,,,,,,,,,,,,,,,,,,,,torbay_twilight,,,,,,,,,night,,,,truro_twilight, +Week 14 Day Thu,12/9/21,,,,,,exeter_twilight,,,night,,,,night,,,,,,,,,,,,,,,plymouth_twilight,,,,,,,,torbay_twilight,,,,,truro_twilight,,,,night,,,,, +Week 14 Day Fri,12/10/21,,,night,,weekend_exeter,,,,,,,,,,,,,plymouth_twilight,,night,,,,,,,,,,,,,,,,,,,weekend_torbay,,,weekend_truro,,,,,night,,, +Week 14 Day Sat,12/11/21,,,night,,weekend_exeter,,,,,,,,,,,,,,,night,,,,,weekend_plymouth1,,weekend_plymouth2,,,,,,,,,,,,weekend_torbay,,,weekend_truro,,,,,night,,, +Week 14 Day Sun,12/12/21,,,night,,weekend_exeter,,,,,,,,,,,,,,,night,,,,,weekend_plymouth1,,weekend_plymouth2,,,,,,,,,,,,weekend_torbay,,,weekend_truro,,,,,night,,, +Week 15 Day Mon,12/13/21,,night,,,,,,,exeter_twilight,,,,,,,,,,,,plymouth_twilight,,night,,,,,,,,,,,,torbay_twilight,,,,,,,,,truro_twilight,,night,,,, +Week 15 Day Tue,12/14/21,,night,,,,exeter_twilight,,,,,,,,,,,,,,,,,night,plymouth_twilight,,,,,,,,,,,,,,torbay_twilight,,,,,,,,night,,,truro_twilight, +Week 15 Day Wed,12/15/21,,night,,,,,,,exeter_twilight,,,,,,,,,,plymouth_twilight,,,,night,,,,,,,,,,,,,,,torbay_twilight,,,,,,,,night,truro_twilight,,, +Week 15 Day Thu,12/16/21,,night,,,exeter_twilight,,,,,,,,,,,,,,,,,,night,,,,,plymouth_twilight,,,,,,,,,,torbay_twilight,,,,truro_twilight,,,,night,,,, +Week 15 Day Fri,12/17/21,,,,,,night,weekend_exeter,,,,,,,,,,plymouth_twilight,,,,,,,night,,,,,,,,night,,,,,,weekend_torbay,,,,,,,,,,weekend_truro,, +Week 15 Day Sat,12/18/21,,,,,,night,weekend_exeter,,,,,,,,,,,,,,weekend_plymouth1,,,night,weekend_plymouth2,,,,,,,night,,,weekend_torbay,,,,,,,,,,,,,weekend_truro,, +Week 15 Day Sun,12/19/21,,,,,,night,weekend_exeter,,,,,,,,,,,,,,weekend_plymouth1,,,night,weekend_plymouth2,,,,,,,night,,,weekend_torbay,,,,,,,,,,,,,weekend_truro,, +Week 16 Day Mon,12/20/21,,exeter_twilight,,,,,,night,,,,,plymouth_twilight,,,night,,,,,,,,,,,,,,,,,,,,torbay_twilight,,,,,truro_twilight,,night,,,,,,, +Week 16 Day Tue,12/21/21,,,exeter_twilight,,,,,night,,,,,,,,night,,,,,,,,,,,plymouth_twilight,,,,,,,,,torbay_twilight,,,,,,,night,,truro_twilight,,,,, +Week 16 Day Wed,12/22/21,,,,,,exeter_twilight,,night,,,,,,,,night,,,,,,,,,,,,,,plymouth_twilight,,torbay_twilight,,,,,,,,,,,night,,,,,truro_twilight,, +Week 16 Day Thu,12/23/21,,,,,,exeter_twilight,,night,,,,,,,,night,,,,,,,,,,,,plymouth_twilight,,,,torbay_twilight,,,,,,,,,,,night,,,,,,,truro_twilight +Week 16 Day Fri,12/24/21,,,,,,,,,night,weekend_exeter,,,,,,,night,,,,,,,,plymouth_twilight,,,,,,,,weekend_torbay,night,,,,,,,weekend_truro,,,,,,,,, +Week 16 Day Sat,12/25/21,,,,,,,,,night,weekend_exeter,,,,,,,night,,weekend_plymouth1,,,,,,,,,weekend_plymouth2,,,,,weekend_torbay,night,,,,,,,weekend_truro,,,,,,,,, +Week 16 Day Sun,12/26/21,,,,,,,,,night,weekend_exeter,,,,,,,night,,weekend_plymouth1,,,,,,,,,weekend_plymouth2,,,,,weekend_torbay,night,,,,,,,weekend_truro,,,,,,,,, +Week 17 Day Mon,12/27/21,,,,,,exeter_twilight,,,,,night,,night,,,plymouth_twilight,,,,,,,,,,,,,plymouth_bank_holidays,,,,,,,,,torbay_twilight,,,,,,night,,,,,,truro_twilight +Week 17 Day Tue,12/28/21,,,,,,,,,,,night,exeter_twilight,night,,,plymouth_twilight,,,,,,,,,,,,,plymouth_bank_holidays,,,,,,,,torbay_twilight,,,,,,,night,,truro_twilight,,,, +Week 17 Day Wed,12/29/21,,,,,,,,exeter_twilight,,,night,,night,,,,,,plymouth_twilight,,,,,,,,,,,,,,,,,,torbay_twilight,,,,,,,night,,,truro_twilight,,, +Week 17 Day Thu,12/30/21,,,,,,,,,exeter_twilight,,night,,night,,,,,,,,,,,,,,,,,,,,,,,,torbay_twilight,,,,,,,night,,truro_twilight,,,, +Week 17 Day Fri,12/31/21,,,,,,,,weekend_exeter,,,,night,,,night,,,,,,plymouth_twilight,,,,,,,,,,,,,,weekend_torbay,,,,,,,,weekend_truro,,,,,,night, +Week 17 Day Sat,1/1/22,,,,,,,,weekend_exeter,,,,night,,,night,,,,,weekend_plymouth1,,,,weekend_plymouth2,,,,,,,,,,,weekend_torbay,,,,,,,,weekend_truro,,,,,,night, +Week 17 Day Sun,1/2/22,,,,,,,,weekend_exeter,,,,night,,,night,,,,,weekend_plymouth1,,,,weekend_plymouth2,,,,,,,,,,,weekend_torbay,,,,,,,,weekend_truro,,,,,,night, +Week 18 Day Mon,1/3/22,,exeter_twilight,,,,,,,,night,,,,night,,,,plymouth_bank_holidays,plymouth_twilight,,,,,,,,,,,,,,,,,night,,torbay_twilight,,,,,,,,truro_twilight,,,, +Week 18 Day Tue,1/4/22,,,exeter_twilight,,,,,,,night,,,,night,,,,,,,plymouth_twilight,,,,,,,,,,,,,,,night,,torbay_twilight,,,,,,,,,truro_twilight,,, +Week 18 Day Wed,1/5/22,,,,,,,,,,night,,exeter_twilight,,night,,,,,plymouth_twilight,,,,,,,,,,,,,,,,,night,,torbay_twilight,,,,,,,,,,,,truro_twilight +Week 18 Day Thu,1/6/22,,,,,,,,,,night,,exeter_twilight,,night,,,,,,,,,,,,,,,,plymouth_twilight,,,,,,night,,torbay_twilight,,,,truro_twilight,,,,,,,, +Week 18 Day Fri,1/7/22,,,,,,,night,,,,weekend_exeter,,,,,,,,,plymouth_twilight,,,,,,,,,night,,,,weekend_torbay,night,,,,,,,,,,,,weekend_truro,,,, +Week 18 Day Sat,1/8/22,,,,,,,night,,,,weekend_exeter,,weekend_plymouth2,,,weekend_plymouth1,,,,,,,,,,,,,night,,,,weekend_torbay,night,,,,,,,,,,,,weekend_truro,,,, +Week 18 Day Sun,1/9/22,,,,,,,night,,,,weekend_exeter,,weekend_plymouth2,,,weekend_plymouth1,,,,,,,,,,,,,night,,,,weekend_torbay,night,,,,,,,,,,,,weekend_truro,,,, +Week 19 Day Mon,1/10/22,,,,,,,,exeter_twilight,,,,,,,,,,plymouth_twilight,,,,,,,night,,,,,,,,,,,,torbay_twilight,,,night,,night,,,,,,,truro_twilight, +Week 19 Day Tue,1/11/22,,,,,,,,,exeter_twilight,,,,,,,,,,,,,,,plymouth_twilight,night,,,,,,,,,,,,torbay_twilight,,,night,,night,,,,,,,truro_twilight, +Week 19 Day Wed,1/12/22,,,,,,,,,,,exeter_twilight,,,,,,plymouth_twilight,,,,,,,,night,,,,,,,,,,,,torbay_twilight,,,night,,night,,,truro_twilight,,,,, +Week 19 Day Thu,1/13/22,,,,,,,,,,exeter_twilight,,,,,plymouth_twilight,,,,,,,,,,night,,,,,,,,,,,,torbay_twilight,,,night,,night,truro_twilight,,,,,,, +Week 19 Day Fri,1/14/22,,,night,,weekend_exeter,,,,,,,,,,,,,night,plymouth_twilight,,,,,,,,,,,,,,,,,,,weekend_torbay,night,,,,,,weekend_truro,,,,, +Week 19 Day Sat,1/15/22,,,night,,weekend_exeter,,,,,,,,,,weekend_plymouth1,,,night,,,,,,weekend_plymouth2,,,,,,,,,,,,,,weekend_torbay,night,,,,,,weekend_truro,,,,, +Week 19 Day Sun,1/16/22,,,night,,weekend_exeter,,,,,,,,,,weekend_plymouth1,,,night,,,,,,weekend_plymouth2,,,,,,,,,,,,,,weekend_torbay,night,,,,,,weekend_truro,,,,, +Week 20 Day Mon,1/17/22,,,,,,,,night,,,,exeter_twilight,,,,,,,night,,,,plymouth_twilight,,,,,,,,,night,torbay_twilight,,,,,,,,,,,,,,,,truro_twilight, +Week 20 Day Tue,1/18/22,,,,,,,,night,exeter_twilight,,,,,plymouth_twilight,,,,,night,,,,,,,,,,,,,night,,,,,,,,torbay_twilight,,,,,,,,truro_twilight,, +Week 20 Day Wed,1/19/22,,exeter_twilight,,,,,,night,,,,,,,,,plymouth_twilight,,night,,,,,,,,,,,,,night,,,,,,,,torbay_twilight,,,,truro_twilight,,,,,, +Week 20 Day Thu,1/20/22,,,,,exeter_twilight,,,night,,,,,,,,,,,night,,,,,plymouth_twilight,,,,,,,,night,torbay_twilight,,,,,,,,,,,,truro_twilight,,,,, +Week 20 Day Fri,1/21/22,,,,,,,,,weekend_exeter,,,,,,plymouth_twilight,,,,,,,,night,,,,,,,,,,,,,weekend_torbay,night,,,,night,,,,,weekend_truro,,,, +Week 20 Day Sat,1/22/22,,,,,,,,,weekend_exeter,,,,,,,weekend_plymouth2,,,,,,,night,,,,,,weekend_plymouth1,,,,,,,weekend_torbay,night,,,,night,,,,,weekend_truro,,,, +Week 20 Day Sun,1/23/22,,,,,,,,,weekend_exeter,,,,,,,weekend_plymouth2,,,,,,,night,,,,,,weekend_plymouth1,,,,,,,weekend_torbay,night,,,,night,,,,,weekend_truro,,,, +Week 21 Day Mon,1/24/22,,,,,,exeter_twilight,,,,,,,plymouth_twilight,,,,,,,,night,,,,,,,,,,,,night,,torbay_twilight,,,,,,,,truro_twilight,,,,night,,, +Week 21 Day Tue,1/25/22,,,,,,,exeter_twilight,,,,,,,,,,,,plymouth_twilight,,night,,,,,,,,,,,,night,,torbay_twilight,,,,,,,,,,,,night,,,truro_twilight +Week 21 Day Wed,1/26/22,,,,,,,,,exeter_twilight,,,,plymouth_twilight,,,,,,,,night,,,,,,,,,,,,night,,torbay_twilight,,,,,,truro_twilight,,,,,,night,,, +Week 21 Day Thu,1/27/22,,,,,,,,,,,,exeter_twilight,,,,,,,plymouth_twilight,,night,,,,,,,,,,,,night,,,,,,torbay_twilight,,,,truro_twilight,,,,night,,, +Week 21 Day Fri,1/28/22,,,,,,,,,,,weekend_exeter,,,,,,,plymouth_twilight,,night,,,,,,,,,,,,,,,,,,night,,weekend_torbay,,night,,weekend_truro,,,,,, +Week 21 Day Sat,1/29/22,,,,,,,,,,,weekend_exeter,,weekend_plymouth2,weekend_plymouth1,,,,,,night,,,,,,,,,,,,,,,,,,night,,weekend_torbay,,night,,weekend_truro,,,,,, +Week 21 Day Sun,1/30/22,,,,,,,,,,,weekend_exeter,,weekend_plymouth2,weekend_plymouth1,,,,,,night,,,,,,,,,,,,,,,,,,night,,weekend_torbay,,night,,weekend_truro,,,,,, +Week 22 Day Mon,1/31/22,,,,,,,night,exeter_twilight,,,,,,,night,,,,,,,,,,,,,,plymouth_twilight,,,,,,,torbay_twilight,,,night,,,,,,truro_twilight,,,,, +Week 22 Day Tue,2/1/22,,,,,,,night,,,,,exeter_twilight,,,night,,,,,,,,plymouth_twilight,,,,,,,,,,,,,torbay_twilight,,,night,,truro_twilight,,,,,,,,, +Week 22 Day Wed,2/2/22,,,,,,,night,exeter_twilight,,,,,,,night,,plymouth_twilight,,,,,,,,,,,,,,,,,,,torbay_twilight,,,night,,,,,,,truro_twilight,,,, +Week 22 Day Thu,2/3/22,,,,,,,night,,,exeter_twilight,,,,,night,,,,,,,,,,,,,,,,,,,,,torbay_twilight,,,night,,,,,,,,,,truro_twilight, +Week 22 Day Fri,2/4/22,,weekend_exeter,,,,,,,,,,,,,,,,plymouth_twilight,,,,,,,night,,,,,,,,,,night,,weekend_torbay,,,,weekend_truro,,night,,,,,,, +Week 22 Day Sat,2/5/22,,weekend_exeter,,,,,,,,,,,,,,,,,weekend_plymouth1,,weekend_plymouth2,,,,night,,,,,,,,,,night,,weekend_torbay,,,,weekend_truro,,night,,,,,,, +Week 22 Day Sun,2/6/22,,weekend_exeter,,,,,,,,,,,,,,,,,weekend_plymouth1,,weekend_plymouth2,,,,night,,,,,,,,,,night,,weekend_torbay,,,,weekend_truro,,night,,,,,,, +Week 23 Day Mon,2/7/22,night,,,,,,exeter_twilight,,,,,night,,,plymouth_twilight,,,,,,,,,,,,,,,,,,,night,,,,,torbay_twilight,,,,,,,,truro_twilight,,, +Week 23 Day Tue,2/8/22,night,,,,exeter_twilight,,,,,,,night,,plymouth_twilight,,,,,,,,,,,,,,,,,,torbay_twilight,,night,,,,,,,,truro_twilight,,,,,,,, +Week 23 Day Wed,2/9/22,night,,,,exeter_twilight,,,,,,,night,,,,,,,,plymouth_twilight,,,,,,,,,,,,torbay_twilight,,night,,,,,,,,,truro_twilight,,,,,,, +Week 23 Day Thu,2/10/22,night,,,,,,exeter_twilight,,,,,night,,,,,,,,,,,,,,,,,,plymouth_twilight,,torbay_twilight,,night,,,,,,,truro_twilight,,,,,,,,, +Week 23 Day Fri,2/11/22,,,,,,,,,weekend_exeter,,,,,,,night,,,,,plymouth_twilight,,,,,,,,,,,,,,,night,,,,weekend_torbay,,,,,weekend_truro,,night,,, +Week 23 Day Sat,2/12/22,,,,,,,,,weekend_exeter,,,,,,weekend_plymouth2,night,,,,weekend_plymouth1,,,,,,,,,,,,,,,,night,,,,weekend_torbay,,,,,weekend_truro,,night,,, +Week 23 Day Sun,2/13/22,,,,,,,,,weekend_exeter,,,,,,weekend_plymouth2,night,,,,weekend_plymouth1,,,,,,,,,,,,,,,,night,,,,weekend_torbay,,,,,weekend_truro,,night,,, +Week 24 Day Mon,2/14/22,,night,,,,exeter_twilight,,,,,,,,,,,,,,,,,,night,,,,plymouth_twilight,,,,,,,torbay_twilight,,night,,,,,,,,,,,,truro_twilight, +Week 24 Day Tue,2/15/22,,night,,,,,exeter_twilight,,,,,,,,,,,,,,,,,night,,,,,,plymouth_twilight,,,,,torbay_twilight,,night,,,,,,,,,,,,truro_twilight, +Week 24 Day Wed,2/16/22,,night,,,,,,,exeter_twilight,,,,,,,,,,,,,,,night,,,,,plymouth_twilight,,,,,,,,night,,torbay_twilight,,,truro_twilight,,,,,,,, +Week 24 Day Thu,2/17/22,,night,exeter_twilight,,,,,,,,,,,,,,,,,plymouth_twilight,,,,night,,,,,,,,,,,,,night,,torbay_twilight,,,,,truro_twilight,,,,,, +Week 24 Day Fri,2/18/22,,,,,night,,,weekend_exeter,,,,,plymouth_twilight,,,,,,,,,,,,,,,night,,,,night,,,,,,weekend_torbay,,,,,,,,,,weekend_truro,, +Week 24 Day Sat,2/19/22,,,,,night,,,weekend_exeter,,,,,,,,,,weekend_plymouth1,,,,,,,,,,night,weekend_plymouth2,,,night,,,,,,weekend_torbay,,,,,,,,,,weekend_truro,, +Week 24 Day Sun,2/20/22,,,,,night,,,weekend_exeter,,,,,,,,,,weekend_plymouth1,,,,,,,,,,night,weekend_plymouth2,,,night,,,,,,weekend_torbay,,,,,,,,,,weekend_truro,, +Week 25 Day Mon,2/21/22,,,exeter_twilight,,,,,,night,,,,,,,,,,plymouth_twilight,night,,,,,,,,,,,,,,,night,torbay_twilight,,,,,,truro_twilight,,,,,,,, +Week 25 Day Tue,2/22/22,,,,,,,,,night,,,exeter_twilight,,,,,,,,night,,,,,,,,,,,,,,,night,,,,,torbay_twilight,,,,,,,truro_twilight,,, +Week 25 Day Wed,2/23/22,,exeter_twilight,,,,,,,night,,,,plymouth_twilight,,,,,,,night,,,,,,,,,,,,,,,night,,,,,torbay_twilight,,,,,,,,truro_twilight,, +Week 25 Day Thu,2/24/22,,,exeter_twilight,,,,,,night,,,,,,plymouth_twilight,,,,,night,,,,,,,,,,,,,,,night,torbay_twilight,,,,,,,,,,,,truro_twilight,, +Week 25 Day Fri,2/25/22,,,,,,,,,,,,weekend_exeter,,plymouth_twilight,,,,,night,,,,,,,,,,,,,,night,weekend_torbay,,,,,,,,,,,,,weekend_truro,,night, +Week 25 Day Sat,2/26/22,,,,,,,,,,,,weekend_exeter,weekend_plymouth1,,,,,,night,,,,weekend_plymouth2,,,,,,,,,,night,weekend_torbay,,,,,,,,,,,,,weekend_truro,,night, +Week 25 Day Sun,2/27/22,,,,,,,,,,,,weekend_exeter,weekend_plymouth1,,,,,,night,,,,weekend_plymouth2,,,,,,,,,,night,weekend_torbay,,,,,,,,,,,,,weekend_truro,,night, +Week 26 Day Mon,2/28/22,,,,,,,,exeter_twilight,,,,,,,,,,,,,,,,,,,,night,,,,,,,,,torbay_twilight,night,,,night,,,,truro_twilight,,,,, +Week 26 Day Tue,3/1/22,,,,,,,,,exeter_twilight,,,,,,,,,,,plymouth_twilight,,,,,,,,night,,,,,,,,,torbay_twilight,night,,,night,,,,truro_twilight,,,,, +Week 26 Day Wed,3/2/22,,,,,,,,exeter_twilight,,,,,,,,,,,,,,,,plymouth_twilight,,,,night,,,,,,,,,torbay_twilight,night,,,night,,,truro_twilight,,,,,, +Week 26 Day Thu,3/3/22,,,,,,exeter_twilight,,,,,,,,,,,,plymouth_twilight,,,,,,,,,,night,,,,,,,,,torbay_twilight,night,,,night,,truro_twilight,,,,,,, +Week 26 Day Fri,3/4/22,,night,,,,,weekend_exeter,,,,,,,plymouth_twilight,,,night,,,,,,,,,,,,,,,,,,,weekend_torbay,,,night,,,,,,,,weekend_truro,,, +Week 26 Day Sat,3/5/22,,night,,,,,weekend_exeter,,,,,,,,,,night,,,,,,,weekend_plymouth1,,,,,weekend_plymouth2,,,,,,,weekend_torbay,,,night,,,,weekend_truro,,,,,,, +Week 26 Day Sun,3/6/22,,night,,,,,weekend_exeter,,,,,,,,,,night,,,,,,,weekend_plymouth1,,,,,weekend_plymouth2,,,,,,,weekend_torbay,,,night,,,,weekend_truro,,,,,,, diff --git a/requirements b/requirements deleted file mode 100644 index e69de29..0000000 diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..e08ff77 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,2 @@ +pyomo +govuk_bank_holidays \ No newline at end of file diff --git a/rota.csv b/rota.csv index fa64ced..8b47c3c 100644 --- a/rota.csv +++ b/rota.csv @@ -1,60 +1,60 @@ -"Name","Madalina Drumea","Layla Bell","Stephanie Bailey","Salma Aslam","Alex wood","Max Ireland","Seren Peters","Charles Finan","Paul Ward","Delilah Trimmer","Matt Murphey","Tom Welsh","Kyaw Tint","Maththew O'Brien","Max Finzel","Zainab Sharaf","Jean Skumar","Michael Tomek","Dhuvresh Patel","Nicolas Dziadulewicz","Vilim Kalamar","Jenna Millington","Georgina Edwards","Jenn Haw fong","Paul Jenkins","Rebecca Murphy","Sophie McGlade","Amoolya Mannava","Ross Kruger","Fiona Lyall","Jon Skinner","Andrew MacCormick","Joel Lim","Mark Haley","Wijhdan Abusrewil","Alexander Sanchez - cabello","Chong Yew Ng","Matthew Thorley","Sayed Hashim Alqarooni","Harriet Conley","Alexander Wijnberg","Cameron Bullock","Alan Eccles","Christian Greer","Hannah Lewis","Amina Odeh","Sarath Vennam","Mo Babsail","Richard Chaytor","Sherafghan PROC" -"Site","barnstaple","exeter","exeter","exeter","exeter","exeter","exeter","exeter","exeter","exeter","exeter","exeter","plymouth","plymouth","plymouth","plymouth","plymouth","plymouth","plymouth","plymouth","plymouth","plymouth","plymouth","plymouth","plymouth","plymouth","plymouth","plymouth","plymouth","plymouth_twilights","plymouth_twilights","torbay","torbay","torbay","torbay","torbay","torbay","torbay","torbay","torbay","truro","truro","truro","truro","truro","truro","truro","truro","truro","truro no proc" -"Grade","3","2","2","3","3","3","3","4","4","5","5","5","2","2","2","2","3","3","3","3","3","4","4","4","4","5","5","5","5","6","6","2","2","2","2","3","4","4","4","5","2","2","3","3","3","4","4","5","5","5" -"FTE","100","100","100","60","100","100","100","100","100","60","100","100","100","100","100","100","60","80","100","100","100","60","80","100","100","100","80","100","100","60","100","100","100","100","100","100","90","100","100","60","100","100","80","100","100","100","100","100","100","100" -"Week 1 Day Mon","night_weekday","","","","","","","exeter_twilight","","night_weekday","","","","","","","","","","","","","","","","","plymouth_twilight","","","","","","","","","","","torbay_twilight","","","","","night_weekday","","","","truro_twilight","","","" -"Week 1 Day Tue","night_weekday","","","","","","","","","night_weekday","exeter_twilight","","","","","","","","","","","","","","","","plymouth_twilight","","","","","","","","","","","torbay_twilight","","","","","night_weekday","","","","truro_twilight","","","" -"Week 1 Day Wed","night_weekday","","","","","","","","","night_weekday","exeter_twilight","","","","","","","","","plymouth_twilight","","","","","","","","","","","","torbay_twilight","","","","","","","","","","truro_twilight","night_weekday","","","","","","","" -"Week 1 Day Thu","night_weekday","","exeter_twilight","","","","","","","night_weekday","","","","","","plymouth_twilight","","","","","","","","","","","","","","","","torbay_twilight","","","","","","","","","","","night_weekday","","truro_twilight","","","","","" -"Week 1 Day Fri","","","","","","","","weekend_exeter","night_weekend","","","","","","plymouth_twilight","","","","","","","","","","","","","","","","","","","","","","weekend_torbay","","night_weekend","","","","","","","weekend_truro","","","night_weekend","" -"Week 1 Day Sat","","","","","","","","weekend_exeter","night_weekend","","","","","","","","","","","","","","","weekend_plymouth1","","","","","weekend_plymouth2","","","","","","","","weekend_torbay","","night_weekend","","","","","","","weekend_truro","","","night_weekend","" -"Week 1 Day Sun","","","","","","","","weekend_exeter","night_weekend","","","","","","","","","","","","","","","weekend_plymouth1","","","","","weekend_plymouth2","","","","","","","","weekend_torbay","","night_weekend","","","","","","","weekend_truro","","","night_weekend","" -"Week 2 Day Mon","","exeter_twilight","","","","night_weekday","","","","","","","","plymouth_twilight","","","","","","","","","","","night_weekday","","","","","","","","","","torbay_twilight","","","","","","","","","","","","","night_weekday","","truro_twilight" -"Week 2 Day Tue","","","","","","night_weekday","","","","","","exeter_twilight","","","","","","","","plymouth_twilight","","","","","night_weekday","","","","","","","","","","","","","torbay_twilight","","","","truro_twilight","","","","","","night_weekday","","" -"Week 2 Day Wed","","","","","","night_weekday","","exeter_twilight","","","","","","","","","","","","","","","","","night_weekday","","","","plymouth_twilight","","","","","","","","","","torbay_twilight","","","","","","truro_twilight","","","night_weekday","","" -"Week 2 Day Thu","","","","","exeter_twilight","night_weekday","","","","","","","plymouth_twilight","","","","","","","","","","","","night_weekday","","","","","","","","","","","","","","torbay_twilight","","","","","","","truro_twilight","","night_weekday","","" -"Week 2 Day Fri","","","weekend_exeter","","","","night_weekend","","","","","","","plymouth_twilight","","","","","","","","","night_weekend","","","","","","","","","","","","weekend_torbay","night_weekend","","","","","weekend_truro","","","","","","","","","" -"Week 2 Day Sat","","","weekend_exeter","","","","night_weekend","","","","","","weekend_plymouth1","","","","","weekend_plymouth2","","","","","night_weekend","","","","","","","","","","","","weekend_torbay","night_weekend","","","","","weekend_truro","","","","","","","","","" -"Week 2 Day Sun","","","weekend_exeter","","","","night_weekend","","","","","","weekend_plymouth1","","","","","weekend_plymouth2","","","","","night_weekend","","","","","","","","","","","","weekend_torbay","night_weekend","","","","","weekend_truro","","","","","","","","","" -"Week 3 Day Mon","","exeter_twilight","","","night_weekday","","","","","","","","","","","","","","","night_weekday","","","","","plymouth_twilight","","","","","","","","torbay_twilight","","","","","","","","","truro_twilight","","","","","","","night_weekday","" -"Week 3 Day Tue","","","","","night_weekday","","","","","","","exeter_twilight","","","","","","","","night_weekday","","","","","","","","","","","plymouth_twilight","","","torbay_twilight","","","","","","","","","","truro_twilight","","","","","night_weekday","" -"Week 3 Day Wed","","","exeter_twilight","","night_weekday","","","","","","","","","","","plymouth_twilight","","","","night_weekday","","","","","","","","","","","","","","torbay_twilight","","","","","","","truro_twilight","","","","","","","","night_weekday","" -"Week 3 Day Thu","","","","","night_weekday","exeter_twilight","","","","","","","","","","","","","","night_weekday","","","","","","","","","","","plymouth_twilight","","torbay_twilight","","","","","","","","truro_twilight","","","","","","","","night_weekday","" -"Week 3 Day Fri","","","","","","","","","","","weekend_exeter","night_weekend","","","","","night_weekend","","plymouth_twilight","","","","","","","","","","","","","weekend_torbay","","","","","","","","","","weekend_truro","","night_weekend","","","","","","" -"Week 3 Day Sat","","","","","","","","","","","weekend_exeter","night_weekend","","","","weekend_plymouth2","night_weekend","","","","weekend_plymouth1","","","","","","","","","","","weekend_torbay","","","","","","","","","","weekend_truro","","night_weekend","","","","","","" -"Week 3 Day Sun","","","","","","","","","","","weekend_exeter","night_weekend","","","","weekend_plymouth2","night_weekend","","","","weekend_plymouth1","","","","","","","","","","","weekend_torbay","","","","","","","","","","weekend_truro","","night_weekend","","","","","","" -"Week 4 Day Mon","","","","","","exeter_twilight","night_weekday","","","","","","","","","","","","plymouth_twilight","","","","","","","","","night_weekday","","","","","","torbay_twilight","","night_weekday","","","","","","","","","truro_twilight","","","","","" -"Week 4 Day Tue","","","","","","exeter_twilight","night_weekday","","","","","","plymouth_twilight","","","","","","","","","","","","","","","night_weekday","","","","","torbay_twilight","","","night_weekday","","","","","truro_twilight","","","","","","","","","" -"Week 4 Day Wed","","","","","exeter_twilight","","night_weekday","","","","","","","","plymouth_twilight","","","","","","","","","","","","","night_weekday","","","","","torbay_twilight","","","night_weekday","","","","","","","","","","","","","","truro_twilight" -"Week 4 Day Thu","","","","","","","night_weekday","","","","","exeter_twilight","","","","","","","plymouth_twilight","","","","","","","","","night_weekday","","","","torbay_twilight","","","","night_weekday","","","","","truro_twilight","","","","","","","","","" -"Week 4 Day Fri","night_weekend","","","","weekend_exeter","","","","","","","","","","","plymouth_twilight","","","","","","","","","night_weekend","","","","","","","","","weekend_torbay","","","","","","","","","","","weekend_truro","","","night_weekend","","" -"Week 4 Day Sat","night_weekend","","","","weekend_exeter","","","","","","","","","weekend_plymouth1","","","","","","weekend_plymouth2","","","","","night_weekend","","","","","","","","","weekend_torbay","","","","","","","","","","","weekend_truro","","","night_weekend","","" -"Week 4 Day Sun","night_weekend","","","","weekend_exeter","","","","","","","","","weekend_plymouth1","","","","","","weekend_plymouth2","","","","","night_weekend","","","","","","","","","weekend_torbay","","","","","","","","","","","weekend_truro","","","night_weekend","","" -"Week 5 Day Mon","","exeter_twilight","","","","","","","","","night_weekday","","","","","","","","","","night_weekday","","plymouth_twilight","","","","","","","","","","night_weekday","","","torbay_twilight","","","","","","","","","","","","","","truro_twilight" -"Week 5 Day Tue","","","exeter_twilight","","","","","","","","night_weekday","","plymouth_twilight","","","","","","","","night_weekday","","","","","","","","","","","","night_weekday","","torbay_twilight","","","","","","","truro_twilight","","","","","","","","" -"Week 5 Day Wed","","exeter_twilight","","","","","","","","","night_weekday","","","","","","","","","","night_weekday","","","","","","","","","plymouth_twilight","","torbay_twilight","night_weekday","","","","","","","","truro_twilight","","","","","","","","","" -"Week 5 Day Thu","","","","","","","exeter_twilight","","","","night_weekday","","","","","","","","","","night_weekday","","","","","","","","","plymouth_twilight","","torbay_twilight","night_weekday","","","","","","","","","","","","","","","truro_twilight","","" -"Week 5 Day Fri","","","","","","","","","","","","weekend_exeter","","","","","","","night_weekend","","","","","","plymouth_twilight","","","","night_weekend","","","","","","night_weekend","weekend_torbay","","","","","","","","","","","","","weekend_truro","" -"Week 5 Day Sat","","","","","","","","","","","","weekend_exeter","","","weekend_plymouth2","","weekend_plymouth1","","night_weekend","","","","","","","","","","night_weekend","","","","","","night_weekend","weekend_torbay","","","","","","","","","","","","","weekend_truro","" -"Week 5 Day Sun","","","","","","","","","","","","weekend_exeter","","","weekend_plymouth2","","weekend_plymouth1","","night_weekend","","","","","","","","","","night_weekend","","","","","","night_weekend","weekend_torbay","","","","","","","","","","","","","weekend_truro","" -"Week 6 Day Mon","","","","","","","","night_weekday","exeter_twilight","","","","","plymouth_twilight","","","","night_weekday","","","","","","","","","","","","","","","","","","","","","torbay_twilight","","night_weekday","","","","","truro_twilight","","","","" -"Week 6 Day Tue","","","","","","","","night_weekday","exeter_twilight","","","","","","","","","night_weekday","","","","","","","","","plymouth_twilight","","","","","","","","","","","","torbay_twilight","","night_weekday","","truro_twilight","","","","","","","" -"Week 6 Day Wed","","","","","","","","night_weekday","","","","exeter_twilight","","","","","","night_weekday","","","","","","","","","","","plymouth_twilight","","","","","","","","","","torbay_twilight","","night_weekday","","","","","","","","","truro_twilight" -"Week 6 Day Thu","","","","","","","","night_weekday","","exeter_twilight","","","","","","","","night_weekday","","","","","","plymouth_twilight","","","","","","","","","","torbay_twilight","","","","","","","night_weekday","","truro_twilight","","","","","","","" -"Week 6 Day Fri","","","","","","weekend_exeter","","","","","","","","","","","","","","","","","","plymouth_twilight","","","night_weekend","","","","","night_weekend","","","","","","weekend_torbay","","","","","","","","","night_weekend","weekend_truro","","" -"Week 6 Day Sat","","","","","","weekend_exeter","","","","","","","weekend_plymouth2","","","","","","","","","","","","weekend_plymouth1","","night_weekend","","","","","night_weekend","","","","","","weekend_torbay","","","","","","","","","night_weekend","weekend_truro","","" -"Week 6 Day Sun","","","","","","weekend_exeter","","","","","","","weekend_plymouth2","","","","","","","","","","","","weekend_plymouth1","","night_weekend","","","","","night_weekend","","","","","","weekend_torbay","","","","","","","","","night_weekend","weekend_truro","","" -"Week 7 Day Mon","","night_weekday","exeter_twilight","","","","","","","","","","","","","","","","","","","","","plymouth_twilight","","","","","","","","","","","torbay_twilight","","night_weekday","","","","","","","","","night_weekday","","","truro_twilight","" -"Week 7 Day Tue","","night_weekday","","","","","exeter_twilight","","","","","","","","","plymouth_twilight","","","","","","","","","","","","","","","","","","torbay_twilight","","","night_weekday","","","","","truro_twilight","","","","night_weekday","","","","" -"Week 7 Day Wed","","night_weekday","","","","","","exeter_twilight","","","","","","","","","plymouth_twilight","","","","","","","","","","","","","","","","","","","","night_weekday","","torbay_twilight","","","","","truro_twilight","","night_weekday","","","","" -"Week 7 Day Thu","","night_weekday","","","","","","","exeter_twilight","","","","","","","","","","","","","","","","","","","","plymouth_twilight","","","","","","","","night_weekday","","torbay_twilight","","","","","","","night_weekday","truro_twilight","","","" -"Week 7 Day Fri","","","","","","","weekend_exeter","","","","","","","","","plymouth_twilight","","","","","","","","","","","","night_weekend","","","","","weekend_torbay","night_weekend","","","","","","","","","night_weekend","","","","","","","weekend_truro" -"Week 7 Day Sat","","","","","","","weekend_exeter","","","","","","","","weekend_plymouth1","","","","weekend_plymouth2","","","","","","","","","night_weekend","","","","","weekend_torbay","night_weekend","","","","","","","","","night_weekend","","","","","","","weekend_truro" -"Week 7 Day Sun","","","","","","","weekend_exeter","","","","","","","","weekend_plymouth1","","","","weekend_plymouth2","","","","","","","","","night_weekend","","","","","weekend_torbay","night_weekend","","","","","","","","","night_weekend","","","","","","","weekend_truro" -"Week 8 Day Mon","","exeter_twilight","night_weekday","","","","","","","","","","","plymouth_twilight","","","","","","","","","","night_weekday","","","","","","","","","","","torbay_twilight","","","","","","","","","","night_weekday","","","truro_twilight","","" -"Week 8 Day Tue","","","night_weekday","","","","","","exeter_twilight","","","","","","","","","","","","","","","night_weekday","","","","","","","plymouth_twilight","","","","","","","torbay_twilight","","","","","","truro_twilight","night_weekday","","","","","" -"Week 8 Day Wed","","","night_weekday","","exeter_twilight","","","","","","","","","","plymouth_twilight","","","","","","","","","night_weekday","","","","","","","","","","","","torbay_twilight","","","","","","","","","night_weekday","","","","truro_twilight","" -"Week 8 Day Thu","","","night_weekday","","","","","","exeter_twilight","","","","","","","","","","","","","","plymouth_twilight","night_weekday","","","","","","","","torbay_twilight","","","","","","","","","","","","","night_weekday","truro_twilight","","","","" -"Week 8 Day Fri","","weekend_exeter","","","","","","","","","","","","","plymouth_twilight","","","","","","night_weekend","","","","","","","","","","","","","","","","weekend_torbay","night_weekend","","night_weekend","","","","","","","weekend_truro","","","" -"Week 8 Day Sat","","weekend_exeter","","","","","","","","","","","weekend_plymouth2","weekend_plymouth1","","","","","","","night_weekend","","","","","","","","","","","","","","","","weekend_torbay","night_weekend","","night_weekend","","","","","","","weekend_truro","","","" -"Week 8 Day Sun","","weekend_exeter","","","","","","","","","","","weekend_plymouth2","weekend_plymouth1","","","","","","","night_weekend","","","","","","","","","","","","","","","","weekend_torbay","night_weekend","","night_weekend","","","","","","","weekend_truro","","","" +"Name","Madalina Drumea","Layla Bell","Stephanie Bailey","Salma Aslam","Alex wood","Max Ireland","Seren Peters","Charles Finan","Paul Ward","Delilah Trimmer","Matt Murphey","Tom Welsh","Kyaw Tint","Maththew O'Brien","Max Finzel","Zainab Sharaf","Jean Skumar","Michael Tomek","Dhuvresh Patel","Nicolas Dziadulewicz","Vilim Kalamar","Jenna Millington","Georgina Edwards","Jenn Haw fong","Paul Jenkins","Rebecca Murphy","Sophie McGlade","Amoolya Mannava","Ross Kruger","Fiona Lyall","Jon Skinner","Andrew MacCormick","Mark Haley","Wijhdan Abusrewil","Alexander Sanchez - cabello","Chong Yew Ng","Matthew Thorley","Sayed Hashim Alqarooni","Harriet Conley","Alexander Wijnberg","Cameron Bullock","Alan Eccles","Christian Greer","Hannah Lewis","Amina Odeh","Sarath Vennam","Mo Babsail","Richard Chaytor","Sherafghan PROC" +"Site","barnstaple","exeter","exeter","exeter","exeter","exeter","exeter","exeter","exeter","exeter","exeter","exeter","plymouth","plymouth","plymouth","plymouth","plymouth","plymouth","plymouth","plymouth","plymouth","plymouth","plymouth","plymouth","plymouth","plymouth","plymouth","plymouth","plymouth","plymouth_twilights","plymouth_twilights","torbay","torbay","torbay","torbay","torbay","torbay","torbay","torbay","truro","truro","truro","truro","truro","truro","truro","truro","truro","truro no proc" +"Grade","3","2","2","3","3","3","3","4","4","5","5","5","2","2","2","2","3","3","3","3","3","4","4","4","4","5","5","5","5","6","6","2","2","2","3","4","4","4","5","2","2","3","3","3","4","4","5","5","5" +"FTE","100","100","100","60","100","100","100","100","100","60","100","100","100","100","100","100","60","80","100","100","100","60","80","100","100","100","80","100","100","60","100","100","100","100","100","90","100","100","60","100","100","80","100","100","100","100","100","100","100" +"Week 1 Day Mon","night_weekday","","","","","","","exeter_twilight","","","","","","","","","","","","","","","","","","","plymouth_twilight","night_weekday","","","","","","","","","torbay_twilight","","","","","night_weekday","","","","truro_twilight","","","" +"Week 1 Day Tue","night_weekday","","","","","","","","","","exeter_twilight","","","","","","","","","","","","","","","","plymouth_twilight","night_weekday","","","","","","","","","torbay_twilight","","","","","night_weekday","","truro_twilight","","","","","" +"Week 1 Day Wed","night_weekday","","","","","","","","","exeter_twilight","","","","","","","","","","","","","","","plymouth_twilight","","","night_weekday","","","","torbay_twilight","","","","","","","","","","night_weekday","truro_twilight","","","","","","" +"Week 1 Day Thu","night_weekday","","","","exeter_twilight","","","","","","","","plymouth_twilight","","","","","","","","","","","","","","","night_weekday","","","","torbay_twilight","","","","","","","","","truro_twilight","night_weekday","","","","","","","" +"Week 1 Day Fri","","","","","","","","","weekend_exeter","","","","","plymouth_twilight","","","","","night_weekend","","","","","","","","","","","","","","","","","night_weekend","","weekend_torbay","","","","","","","night_weekend","weekend_truro","","","" +"Week 1 Day Sat","","","","","","","","","weekend_exeter","","","","","","weekend_plymouth1","","","","night_weekend","","","","","weekend_plymouth2","","","","","","","","","","","","night_weekend","","weekend_torbay","","","","","","","night_weekend","weekend_truro","","","" +"Week 1 Day Sun","","","","","","","","","weekend_exeter","","","","","","weekend_plymouth1","","","","night_weekend","","","","","weekend_plymouth2","","","","","","","","","","","","night_weekend","","weekend_torbay","","","","","","","night_weekend","weekend_truro","","","" +"Week 2 Day Mon","","","","","","night_weekday","","exeter_twilight","","","","","","","","plymouth_twilight","","","","","","","","","","","","","night_weekday","","","","","","","","torbay_twilight","","","","","","night_weekday","","","","truro_twilight","","" +"Week 2 Day Tue","","","exeter_twilight","","","night_weekday","","","","","","","plymouth_twilight","","","","","","","","","","","","","","","","night_weekday","","","","","","","","torbay_twilight","","","truro_twilight","","","night_weekday","","","","","","" +"Week 2 Day Wed","","","","","","night_weekday","","exeter_twilight","","","","","","","plymouth_twilight","","","","","","","","","","","","","","night_weekday","","","","","","","","torbay_twilight","","","","","","night_weekday","","truro_twilight","","","","" +"Week 2 Day Thu","","","","","","night_weekday","","","exeter_twilight","","","","","","plymouth_twilight","","","","","","","","","","","","","","night_weekday","","","","","","","","torbay_twilight","","","","","","night_weekday","","truro_twilight","","","","" +"Week 2 Day Fri","","","weekend_exeter","","","","","","","","","","","","","plymouth_twilight","","","","","","","night_weekend","","night_weekend","","","","","","","","","weekend_torbay","night_weekend","","","","","","","","","weekend_truro","","","","","" +"Week 2 Day Sat","","","weekend_exeter","","","","","","","","","","weekend_plymouth2","","","","","","","","","","night_weekend","","night_weekend","","","weekend_plymouth1","","","","","","weekend_torbay","night_weekend","","","","","","","","","weekend_truro","","","","","" +"Week 2 Day Sun","","","weekend_exeter","","","","","","","","","","weekend_plymouth2","","","","","","","","","","night_weekend","","night_weekend","","","weekend_plymouth1","","","","","","weekend_torbay","night_weekend","","","","","","","","","weekend_truro","","","","","" +"Week 3 Day Mon","","","","","","exeter_twilight","night_weekday","","","","","","","","plymouth_twilight","","","","night_weekday","","","","","","","","","","","","","torbay_twilight","","","","","","","","","truro_twilight","","","","","","night_weekday","","" +"Week 3 Day Tue","","","","","exeter_twilight","","night_weekday","","","","","","","","","","","plymouth_twilight","night_weekday","","","","","","","","","","","","","torbay_twilight","","","","","","","","truro_twilight","","","","","","","night_weekday","","" +"Week 3 Day Wed","","exeter_twilight","","","","","night_weekday","","","","","","","","","plymouth_twilight","","","night_weekday","","","","","","","","","","","","","torbay_twilight","","","","","","","","truro_twilight","","","","","","","night_weekday","","" +"Week 3 Day Thu","","","exeter_twilight","","","","night_weekday","","","","","","","","","","","","night_weekday","","","","plymouth_twilight","","","","","","","","","torbay_twilight","","","","","","","","","","","","","","","night_weekday","truro_twilight","" +"Week 3 Day Fri","","","","","night_weekend","weekend_exeter","","","","","","","","","","plymouth_twilight","night_weekend","","","","","","","","","","night_weekend","","","","","","weekend_torbay","","","","","","","","weekend_truro","","","","","","","","" +"Week 3 Day Sat","","","","","night_weekend","weekend_exeter","","","","","","","","","","","night_weekend","","","","weekend_plymouth2","","","","","","night_weekend","","weekend_plymouth1","","","","weekend_torbay","","","","","","","","weekend_truro","","","","","","","","" +"Week 3 Day Sun","","","","","night_weekend","weekend_exeter","","","","","","","","","","","night_weekend","","","","weekend_plymouth2","","","","","","night_weekend","","weekend_plymouth1","","","","weekend_torbay","","","","","","","","weekend_truro","","","","","","","","" +"Week 4 Day Mon","","","exeter_twilight","","","","","","","","night_weekday","","","plymouth_twilight","","","","","","night_weekday","","","","","","","","","","","","","","","torbay_twilight","","","","","","","","","night_weekday","","","","","truro_twilight" +"Week 4 Day Tue","","","exeter_twilight","","","","","","","","night_weekday","","","","","","","","plymouth_twilight","night_weekday","","","","","","","","","","","","","","","torbay_twilight","","","","","","","","","night_weekday","","","","truro_twilight","" +"Week 4 Day Wed","","exeter_twilight","","","","","","","","","night_weekday","","","","","","","","","night_weekday","","","","","","","","","","plymouth_twilight","","","","","torbay_twilight","","","","","","truro_twilight","","","night_weekday","","","","","" +"Week 4 Day Thu","","","","","","","exeter_twilight","","","","night_weekday","","","","","plymouth_twilight","","","","night_weekday","","","","","","","","","","","","","","","torbay_twilight","","","","","","","","","night_weekday","","","","truro_twilight","" +"Week 4 Day Fri","night_weekend","weekend_exeter","","","","","","","","","","","","","","","","","","","","","","","","","","night_weekend","plymouth_twilight","","","","","weekend_torbay","","","","","","","","","night_weekend","","","","weekend_truro","","" +"Week 4 Day Sat","night_weekend","weekend_exeter","","","","","","","","","","","weekend_plymouth2","","","weekend_plymouth1","","","","","","","","","","","","night_weekend","","","","","","weekend_torbay","","","","","","","","","night_weekend","","","","weekend_truro","","" +"Week 4 Day Sun","night_weekend","weekend_exeter","","","","","","","","","","","weekend_plymouth2","","","weekend_plymouth1","","","","","","","","","","","","night_weekend","","","","","","weekend_torbay","","","","","","","","","night_weekend","","","","weekend_truro","","" +"Week 5 Day Mon","","","night_weekday","","","","","","","","exeter_twilight","","","","plymouth_twilight","","","","","","","","","","night_weekday","","","","","","","","torbay_twilight","","","","","","","","","","","","","","","night_weekday","truro_twilight" +"Week 5 Day Tue","","","night_weekday","","","","","","","","","exeter_twilight","","","","","plymouth_twilight","","","","","","","","night_weekday","","","","","","","","","","torbay_twilight","","","","","truro_twilight","","","","","","","","night_weekday","" +"Week 5 Day Wed","","exeter_twilight","night_weekday","","","","","","","","","","","","","","","","","","","","","","night_weekday","","plymouth_twilight","","","","","","","","torbay_twilight","","","","","","","","","truro_twilight","","","","night_weekday","" +"Week 5 Day Thu","","exeter_twilight","night_weekday","","","","","","","","","","","","","","","","","","","","","","night_weekday","","plymouth_twilight","","","","","","","","torbay_twilight","","","","","","","","","","","","truro_twilight","night_weekday","" +"Week 5 Day Fri","","","","","weekend_exeter","","","","","","","night_weekend","","plymouth_twilight","","","","night_weekend","","","","","","","","","","","","","","night_weekend","weekend_torbay","","","","","","","weekend_truro","","","","","","","","","" +"Week 5 Day Sat","","","","","weekend_exeter","","","","","","","night_weekend","","","","","","night_weekend","","weekend_plymouth2","","","","weekend_plymouth1","","","","","","","","night_weekend","weekend_torbay","","","","","","","weekend_truro","","","","","","","","","" +"Week 5 Day Sun","","","","","weekend_exeter","","","","","","","night_weekend","","","","","","night_weekend","","weekend_plymouth2","","","","weekend_plymouth1","","","","","","","","night_weekend","weekend_torbay","","","","","","","weekend_truro","","","","","","","","","" +"Week 6 Day Mon","","","","","","","","night_weekday","exeter_twilight","","","","night_weekday","","","","","","","","","","","","","","","plymouth_twilight","","","","","","torbay_twilight","","","","night_weekday","","","","","truro_twilight","","","","","","" +"Week 6 Day Tue","","","","","","","","night_weekday","","","exeter_twilight","","night_weekday","","","","","","","","","","plymouth_twilight","","","","","","","","","","","","","torbay_twilight","","night_weekday","","","","","","","truro_twilight","","","","" +"Week 6 Day Wed","","","","","","","","night_weekday","exeter_twilight","","","","night_weekday","","","","plymouth_twilight","","","","","","","","","","","","","","","","","","","torbay_twilight","","night_weekday","","","","","","","","truro_twilight","","","" +"Week 6 Day Thu","","","","","","","","night_weekday","","exeter_twilight","","","night_weekday","","","","","","","","plymouth_twilight","","","","","","","","","","","","","","","torbay_twilight","","night_weekday","","","","","","truro_twilight","","","","","" +"Week 6 Day Fri","","night_weekend","","","","","","","","","weekend_exeter","","","","","","","","","","","","","","","","","","night_weekend","","plymouth_twilight","","","","weekend_torbay","","night_weekend","","","","","","","","","","","","weekend_truro" +"Week 6 Day Sat","","night_weekend","","","","","","","","","weekend_exeter","","","weekend_plymouth2","","weekend_plymouth1","","","","","","","","","","","","","night_weekend","","","","","","weekend_torbay","","night_weekend","","","","","","","","","","","","weekend_truro" +"Week 6 Day Sun","","night_weekend","","","","","","","","","weekend_exeter","","","weekend_plymouth2","","weekend_plymouth1","","","","","","","","","","","","","night_weekend","","","","","","weekend_torbay","","night_weekend","","","","","","","","","","","","weekend_truro" +"Week 7 Day Mon","","","","","exeter_twilight","","","","","","","","","","","","","","","","","","plymouth_twilight","night_weekday","","","","","","","","","","night_weekday","","","","torbay_twilight","","","","","","","night_weekday","truro_twilight","","","" +"Week 7 Day Tue","","","","","","","exeter_twilight","","","","","","","","","","","plymouth_twilight","","","","","","night_weekday","","","","","","","","","","night_weekday","","","","torbay_twilight","","truro_twilight","","","","","night_weekday","","","","" +"Week 7 Day Wed","","","","","","","","","","","","exeter_twilight","","plymouth_twilight","","","","","","","","","","night_weekday","","","","","","","","","","night_weekday","","","","torbay_twilight","","","","","truro_twilight","","night_weekday","","","","" +"Week 7 Day Thu","","","","","","","","","","","","exeter_twilight","","","","","","plymouth_twilight","","","","","","night_weekday","","","","","","","","","","night_weekday","","","","torbay_twilight","","","","","truro_twilight","","night_weekday","","","","" +"Week 7 Day Fri","","","","","","","weekend_exeter","","","","","","","","","","","","plymouth_twilight","night_weekend","","","","","","","","","","","","weekend_torbay","","","","night_weekend","","","","night_weekend","","weekend_truro","","","","","","","" +"Week 7 Day Sat","","","","","","","weekend_exeter","","","","","","","","weekend_plymouth1","","","","","night_weekend","weekend_plymouth2","","","","","","","","","","","weekend_torbay","","","","night_weekend","","","","night_weekend","","weekend_truro","","","","","","","" +"Week 7 Day Sun","","","","","","","weekend_exeter","","","","","","","","weekend_plymouth1","","","","","night_weekend","weekend_plymouth2","","","","","","","","","","","weekend_torbay","","","","night_weekend","","","","night_weekend","","weekend_truro","","","","","","","" +"Week 8 Day Mon","","","","","","","","","night_weekday","","exeter_twilight","","","","","","","","","","","","plymouth_twilight","","","","","","","","","","night_weekday","torbay_twilight","","","","","","","","","","truro_twilight","","night_weekday","","","" +"Week 8 Day Tue","","","","","","exeter_twilight","","","night_weekday","","","","","","","","","","","","","","","","","","","","","","plymouth_twilight","","night_weekday","","","","","","torbay_twilight","","","","","","","night_weekday","","","truro_twilight" +"Week 8 Day Wed","","","","","","","","exeter_twilight","night_weekday","","","","","","","","","","","","","","","","","","","","","","plymouth_twilight","","night_weekday","","","torbay_twilight","","","","","","","","","","night_weekday","truro_twilight","","" +"Week 8 Day Thu","","","","","","exeter_twilight","","","night_weekday","","","","","","","","","plymouth_twilight","","","","","","","","","","","","","","","night_weekday","","","torbay_twilight","","","","","","truro_twilight","","","","night_weekday","","","" +"Week 8 Day Fri","","","","","","","","weekend_exeter","","night_weekend","","","","night_weekend","","","","","","","","","","plymouth_twilight","","","","","","","","","","","","","weekend_torbay","","night_weekend","","","","","","","","","weekend_truro","" +"Week 8 Day Sat","","","","","","","","weekend_exeter","","night_weekend","","","","night_weekend","","","","","weekend_plymouth1","","","","","","weekend_plymouth2","","","","","","","","","","","","weekend_torbay","","night_weekend","","","","","","","","","weekend_truro","" +"Week 8 Day Sun","","","","","","","","weekend_exeter","","night_weekend","","","","night_weekend","","","","","weekend_plymouth1","","","","","","weekend_plymouth2","","","","","","","","","","","","weekend_torbay","","night_weekend","","","","","","","","","weekend_truro","" diff --git a/shifts.py b/shifts.py index b353a8b..125b0f3 100644 --- a/shifts.py +++ b/shifts.py @@ -26,16 +26,18 @@ days = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"] full_weekend_count = 2 +# Load uk based bank holidays from govuk_bank_holidays.bank_holidays import BankHolidays bank_holidays = BankHolidays() bank_holiday_map = {} for bank_holiday in bank_holidays.get_holidays(): - bank_holiday_map[bank_holiday['date']] = bank_holiday['title'] + bank_holiday_map[bank_holiday["date"]] = bank_holiday["title"] class SingleShift(object): """Class to hold all details for a shift""" + def __init__( self, sites, @@ -74,13 +76,13 @@ class SingleShift(object): self.force_as_block = force_as_block self.force_as_block_unless_nwd = force_as_block_unless_nwd self.constraints = constraints - + self.bank_holidays_only = bank_holidays_only - #self.total_shifts = length * len(days) * len(shift_days) + # self.total_shifts = length * len(days) * len(shift_days) def __str__(self): - return f"name: {self.name}, site: {self.site}, length: {self.length}, balance weighting: {self.balance_weighting}, balance offset: {self.balance_offset}, hard_constrain: {self.hard_constrain_shift}, workers required : {self.workers_required}, rota on nwds {self.rota_on_nwds}, assign as block: {self.assign_as_block}, force as block: {self.force_as_block}, constraints: {self.constraints}"#, total shifts: {self.total_shifts}" + return f"name: {self.name}, site: {self.site}, length: {self.length}, balance weighting: {self.balance_weighting}, balance offset: {self.balance_offset}, hard_constrain: {self.hard_constrain_shift}, workers required : {self.workers_required}, rota on nwds {self.rota_on_nwds}, assign as block: {self.assign_as_block}, force as block: {self.force_as_block}, constraints: {self.constraints}" # , total shifts: {self.total_shifts}" def get_shift_summary(self): """ @@ -88,21 +90,26 @@ class SingleShift(object): """ return "{}: {} workers for sites ({}) on days ({})".format( - self.name, self.workers_required, ", ".join(self.site), - ", ".join(self.shift_days)) + self.name, + self.workers_required, + ", ".join(self.site), + ", ".join(self.shift_days), + ) class RotaBuilder(object): """Class to hold and manipulate shifts""" - def __init__(self, - start_date, - weeks_to_rota=26, - balance_offset_modifier=1, - ltft_balance_offset=2, - max_night_frequency=2, - max_weekend_frequency=2, - use_previous_shifts=False, - ): + + def __init__( + self, + start_date, + weeks_to_rota=26, + balance_offset_modifier=1, + ltft_balance_offset=2, + max_night_frequency=2, + max_weekend_frequency=2, + use_previous_shifts=False, + ): print("Start time: {}".format(datetime.datetime.now())) print("Weeks to rota: {}".format(weeks_to_rota)) @@ -119,13 +126,15 @@ class RotaBuilder(object): self.use_previous_shifts = use_previous_shifts if start_date.weekday() != 0: - raise ValueError("Start date {} must be a Mon (not a {})".format( - start_date.isoformat(), days[start_date.weekday()])) + raise ValueError( + "Start date {} must be a Mon (not a {})".format( + start_date.isoformat(), days[start_date.weekday()] + ) + ) self.start_date = start_date self.rota_days_length = len(self.weeks) * 7 - self.rota_end_date = self.start_date + datetime.timedelta( - self.rota_days_length) + self.rota_end_date = self.start_date + datetime.timedelta(self.rota_days_length) self.unavailable_to_work = set() self.unavailable_to_work_reason = {} @@ -178,24 +187,28 @@ class RotaBuilder(object): self.week_day_date_map[(week, day)] = d n = n + 1 - def solve_model(self, solver='cbc', use_neos=False, options={}): + self.results = None + + def solve_model(self, solver="cbc", use_neos=False, options={}): print("Setting up solver") - self.opt = SolverFactory(solver) + self.opt = SolverFactory(solver) print("Solving") if use_neos: - solver_manager = SolverManagerFactory('neos') # Solve in neos server - #results = solver_manager.solve(Rota.model, opt=opt, logfile="test.log") - results = solver_manager.solve(self.model, keepfiles=True, tee=True, opt=self.opt, logfile="test.log") + solver_manager = SolverManagerFactory("neos") # Solve in neos server + # results = solver_manager.solve(Rota.model, opt=opt, logfile="test.log") + results = solver_manager.solve( + self.model, keepfiles=True, tee=True, opt=self.opt, logfile="test.log" + ) else: results = self.opt.solve( self.model, tee=True, options=options, - #options={ + # options={ # "threads": 10, - #}, - logfile="test.log" + # }, + logfile="test.log", ) self.results = results @@ -205,7 +218,6 @@ class RotaBuilder(object): if not results.solver.status: sys.exit(0) - def build_model(self): # Initialize model self.model = ConcreteModel() @@ -213,9 +225,12 @@ class RotaBuilder(object): # binary variables representing if a worker is scheduled somewhere # NOTE: this will assign to all possible shift combinations (which we probably don't want) self.model.works = Var( - ((worker.id, week, day, shift) for worker in self.workers - for week, day in self.get_week_day_combinations() - for shift in self.get_shift_names()), + ( + (worker.id, week, day, shift) + for worker in self.workers + for week, day in self.get_week_day_combinations() + for shift in self.get_shift_names() + ), within=Binary, initialize=0, ) @@ -230,31 +245,43 @@ class RotaBuilder(object): # The nights self.model is used to ensure nights are assigned as a block (and limit the number of workers required) self.model.shift_week_worker_assigned = Var( - ((shift, week, worker.id) for worker in self.workers - for week in self.weeks for shift in self.get_shift_names()), + ( + (shift, week, worker.id) + for worker in self.workers + for week in self.weeks + for shift in self.get_shift_names() + ), within=Binary, initialize=0, ) self.model.worker_block_shift_split = Var( - ((week, shift) for week in self.weeks - for shift in self.shifts_to_assign_or_force_as_blocks()), + ( + (week, shift) + for week in self.weeks + for shift in self.shifts_to_assign_or_force_as_blocks() + ), within=Binary, initialize=0, ) self.model.blocks_worker_shift_assigned = Var( - ((worker.id, week, shift) for worker in self.workers - for week in self.weeks - for shift in self.shifts_to_assign_or_force_as_blocks()), + ( + (worker.id, week, shift) + for worker in self.workers + for week in self.weeks + for shift in self.shifts_to_assign_or_force_as_blocks() + ), within=Binary, initialize=0, ) - self.model.blocks_assigned = Var( - ((week, shift) for week in self.weeks - for shift in self.shifts_to_assign_or_force_as_blocks()), + ( + (week, shift) + for week in self.weeks + for shift in self.shifts_to_assign_or_force_as_blocks() + ), within=NonNegativeIntegers, initialize=0, ) @@ -284,32 +311,44 @@ class RotaBuilder(object): # from a single site if self.constraint_options["balance_nights_across_sites"]: self.model.night_per_site = Var( - ((week, shift.name, site) for site in self.sites - for week in self.weeks - for shift in self.get_shifts_with_constraint("night")), - #within=Binary, + ( + (week, shift.name, site) + for site in self.sites + for week in self.weeks + for shift in self.get_shifts_with_constraint("night") + ), + # within=Binary, within=NonNegativeIntegers, initialize=0, ) self.model.night_per_site_t1 = Var( - ((week, shift.name, site) for site in self.sites - for week in self.weeks - for shift in self.get_shifts_with_constraint("night")), + ( + (week, shift.name, site) + for site in self.sites + for week in self.weeks + for shift in self.get_shifts_with_constraint("night") + ), domain=NonNegativeIntegers, initialize=0, ) self.model.night_per_site_t2 = Var( - ((week, shift.name, site) for site in self.sites - for week in self.weeks - for shift in self.get_shifts_with_constraint("night")), + ( + (week, shift.name, site) + for site in self.sites + for week in self.weeks + for shift in self.get_shifts_with_constraint("night") + ), domain=NonNegativeIntegers, initialize=0, ) self.model.shift_count = Var( - ((worker.id, shift) for worker in self.workers - for shift in self.get_shift_names()), + ( + (worker.id, shift) + for worker in self.workers + for shift in self.get_shift_names() + ), domain=NonNegativeReals, initialize=0, ) @@ -390,8 +429,7 @@ class RotaBuilder(object): if self.constraint_options["balance_weekends"]: self.model.works_weekend = Var( - ((worker.id, week) for worker in self.workers - for week in self.weeks), + ((worker.id, week) for worker in self.workers for week in self.weeks), domain=Binary, initialize=0, ) @@ -437,13 +475,16 @@ class RotaBuilder(object): def availability_init(model, wid, week, day): if (wid, week, day) in self.unavailable_to_work: - #print((wid, week, day)) + # print((wid, week, day)) return 0 return 1 self.model.available = Param( - ((worker.id, week, day) for worker in self.workers - for week, day in self.get_week_day_combinations()), + ( + (worker.id, week, day) + for worker in self.workers + for week, day in self.get_week_day_combinations() + ), initialize=availability_init, ) @@ -454,8 +495,11 @@ class RotaBuilder(object): return 0 self.model.work_requests = Param( - ((worker.id, week, day, shift) for worker in self.workers - for week, day, shift in self.get_all_shiftname_combinations()), + ( + (worker.id, week, day, shift) + for worker in self.workers + for week, day, shift in self.get_all_shiftname_combinations() + ), initialize=work_request_init, ) @@ -468,8 +512,11 @@ class RotaBuilder(object): # which would allow more weight to be given if the whole block # is not allocated self.model.pref_not_to_work = Param( - ((worker.id, week, day) for worker in self.workers - for week, day in self.get_week_day_combinations()), + ( + (worker.id, week, day) + for worker in self.workers + for week, day in self.get_week_day_combinations() + ), initialize=pref_init, ) @@ -482,25 +529,34 @@ class RotaBuilder(object): self.build_model_constraints() def build_model_constraints(self): - self.model.constraints = ConstraintList( - ) # Create a set of constraints + self.model.constraints = ConstraintList() # Create a set of constraints # Ensure each shift has the requisit number of workers assigned for ( - week, - day, - shift, - workers_required, - site_required, + week, + day, + shift, + workers_required, + site_required, ) in self.get_required_workers_and_site_combinations(): print(week, day, shift, workers_required, site_required) - self.model.constraints.add(workers_required == sum( - self.model.works[worker.id, week, day, shift] - for worker in self.workers if worker.site in site_required)) + self.model.constraints.add( + workers_required + == sum( + self.model.works[worker.id, week, day, shift] + for worker in self.workers + if worker.site in site_required + ) + ) # And it is not assigned if the worker is from the wrong site - self.model.constraints.add(0 == sum( - self.model.works[worker.id, week, day, shift] - for worker in self.workers if worker.site not in site_required)) + self.model.constraints.add( + 0 + == sum( + self.model.works[worker.id, week, day, shift] + for worker in self.workers + if worker.site not in site_required + ) + ) # # Ensure shifts are only assigned by workers from the allowed sites # self.model.constraints.add(0 == sum( # self.model.works[worker.id, week, day, shift] @@ -508,10 +564,13 @@ class RotaBuilder(object): # Ensure no workers are assigned to shifts that are not required for week, day, shift in self.get_not_required_shifts(): - self.model.constraints.add(0 == sum(self.model.works[worker.id, - week, day, - shift.name] - for worker in self.workers)) + self.model.constraints.add( + 0 + == sum( + self.model.works[worker.id, week, day, shift.name] + for worker in self.workers + ) + ) # Constraint: total hours worked hours worked # for worker in self.workers: @@ -527,25 +586,25 @@ class RotaBuilder(object): # Define a maximum number hours that can be worked per week # NOTE: this works on a calander week not a 7 day period - + # TODO: consider fixing - #def maxHoursPerWeekRule(model, wid, week): + # def maxHoursPerWeekRule(model, wid, week): # return 72 >= sum( # shift.length * model.works[wid, week, day, shift.name] # for day, shift in self.get_day_shiftclass_combinations()) - #self.model.max_hours_per_week_constraint = Constraint( + # self.model.max_hours_per_week_constraint = Constraint( # [worker.id for worker in self.workers], # self.weeks, # rule=maxHoursPerWeekRule) # Define an upper limit for hours worked over the rota period - #def maxHoursRule(model, wid): + # def maxHoursRule(model, wid): # return 8000 >= sum( # shift.length * model.works[wid, week, day, shift.name] # for week, day, shift in self.get_all_shiftclass_combinations()) - #self.model.max_hours_constraint = Constraint( + # self.model.max_hours_constraint = Constraint( # [worker.id for worker in self.workers], rule=maxHoursRule) # Limit to 1 ST2 (or below) on a night shift @@ -554,16 +613,18 @@ class RotaBuilder(object): single_workers = [w for w in self.workers if w.grade < 3] if not single_workers: return Constraint.Skip - return sum(model.shift_week_worker_assigned[shift, week, w.id] - for w in single_workers) <= 1 + return ( + sum( + model.shift_week_worker_assigned[shift, week, w.id] + for w in single_workers + ) + <= 1 + ) if self.constraint_options["limit_to_1_st2_on_nights"]: self.model.night_shifts_max_st_constraint = Constraint( [week for week in self.weeks], - [ - shift.name - for shift in self.get_shifts_with_constraint("night") - ], + [shift.name for shift in self.get_shifts_with_constraint("night")], rule=nightShiftMaxSTRule, ) @@ -571,33 +632,37 @@ class RotaBuilder(object): single_workers = [w for w in self.workers if w.grade >= 4] if not single_workers: return Constraint.Skip - return sum(model.shift_week_worker_assigned[shift, week, w.id] - for w in single_workers) >= 1 + return ( + sum( + model.shift_week_worker_assigned[shift, week, w.id] + for w in single_workers + ) + >= 1 + ) if self.constraint_options["ensure_1_st4_plus_on_nights"]: self.model.night_shifts_min_st4_constraint = Constraint( [week for week in self.weeks], - [ - shift.name - for shift in self.get_shifts_with_constraint("night") - ], + [shift.name for shift in self.get_shifts_with_constraint("night")], rule=nightShiftMinST4Rule, ) def nightShiftDerrifordRule(model, week, shift): derriford_workers = [w for w in self.workers if w.night_at_derriford >= 1] - #if not derriford_workers: - #return Constraint.Skip - return sum(model.shift_week_worker_assigned[shift, week, w.id] - for w in derriford_workers) >= 1 + # if not derriford_workers: + # return Constraint.Skip + return ( + sum( + model.shift_week_worker_assigned[shift, week, w.id] + for w in derriford_workers + ) + >= 1 + ) if self.constraint_options["ensure_derriford_reg_for_nights"]: self.model.night_shifts_derriford_rule = Constraint( [week for week in self.weeks], - [ - shift.name - for shift in self.get_shifts_with_constraint("night") - ], + [shift.name for shift in self.get_shifts_with_constraint("night")], rule=nightShiftDerrifordRule, ) @@ -609,17 +674,21 @@ class RotaBuilder(object): block = shift.name for week in self.weeks: self.model.constraints.add( - self.model.night_per_site[week, block, site] == - sum(self.model.shift_week_worker_assigned[ - block, week, worker.id] + self.model.night_per_site[week, block, site] + == sum( + self.model.shift_week_worker_assigned[ + block, week, worker.id + ] for worker in self.workers - if worker.site == site) - #1 >= sum(self.model.shift_week_worker_assigned[shift.name, week, worker.id] for worker in self.workers if worker.site == site) + if worker.site == site + ) + # 1 >= sum(self.model.shift_week_worker_assigned[shift.name, week, worker.id] for worker in self.workers if worker.site == site) ) self.model.constraints.add( - self.model.night_per_site_t1[week, block, site] - - self.model.night_per_site_t2[week, block, site] == - self.model.night_per_site[week, block, site] - 1) + self.model.night_per_site_t1[week, block, site] + - self.model.night_per_site_t2[week, block, site] + == self.model.night_per_site[week, block, site] - 1 + ) weeks_days = self.get_week_day_combinations() @@ -628,27 +697,33 @@ class RotaBuilder(object): shift = self.get_shift_by_name(shift_name) for worker in self.get_workers_for_shift(shift): self.model.constraints.add( - 8 * self.model.blocks_worker_shift_assigned[ - worker.id, week, shift_name] >= sum( - self.model.works[worker.id, week, day, - shift_name] - for day in shift.shift_days)) + 8 + * self.model.blocks_worker_shift_assigned[ + worker.id, week, shift_name + ] + >= sum( + self.model.works[worker.id, week, day, shift_name] + for day in shift.shift_days + ) + ) self.model.constraints.add( - self.model.blocks_assigned[week, shift_name] == sum( - self.model.blocks_worker_shift_assigned[worker.id, - week, - shift_name] - for worker in self.workers)) + self.model.blocks_assigned[week, shift_name] + == sum( + self.model.blocks_worker_shift_assigned[ + worker.id, week, shift_name + ] + for worker in self.workers + ) + ) if shift.force_as_block: - if shift.force_as_block_unless_nwd: workers = self.get_workers_for_shift(shift) # Get workers who have a nwd on the shift nwd_workers = [] full_workers = [] - + for w in workers: if w.nwd is not None: l = [] @@ -661,142 +736,186 @@ class RotaBuilder(object): nwd_workers.append(w) else: full_workers.append(w) - + else: full_workers.append(w) print(shift.name, [n.name for n in nwd_workers]) - - if not nwd_workers: # Just do the usual + + if not nwd_workers: # Just do the usual self.model.constraints.add( - sum(self.model.blocks_worker_shift_assigned[worker.id, - week, - shift.name] - for worker in self.workers) <= 1) - + sum( + self.model.blocks_worker_shift_assigned[ + worker.id, week, shift.name + ] + for worker in self.workers + ) + <= 1 + ) + else: print(shift.name) self.model.constraints.add( - sum(self.model.blocks_worker_shift_assigned[worker.id, - week, - shift.name] - for worker in full_workers) <= 1) - + sum( + self.model.blocks_worker_shift_assigned[ + worker.id, week, shift.name + ] + for worker in full_workers + ) + <= 1 + ) + self.model.constraints.add( - sum(self.model.blocks_worker_shift_assigned[worker.id, - week, - shift.name] - for worker in workers) <= 2) - - - #self.model.constraints.add( + sum( + self.model.blocks_worker_shift_assigned[ + worker.id, week, shift.name + ] + for worker in workers + ) + <= 2 + ) + + # self.model.constraints.add( # self.model.worker_block_shift_split[week, shift.name] <= 2 - sum(self.model.blocks_worker_shift_assigned[worker.id, # week, # shift.name] # for worker in workers)) - # - #self.model.constraints.add( + # + # self.model.constraints.add( # sum(self.model.works[w.id, week, day,shift.name] # for w in nwd_workers for day in shift.shift_days) - sum(self.model.works[w.id, week, day,shift.name] # for w in full_workers for day in shift.shift_days) >= self.model.worker_block_shift_split[week, shift.name] ) - + else: self.model.constraints.add( - sum(self.model.blocks_worker_shift_assigned[worker.id, - week, - shift.name] - for worker in self.workers) <= 1) + sum( + self.model.blocks_worker_shift_assigned[ + worker.id, week, shift.name + ] + for worker in self.workers + ) + <= 1 + ) # Most of our constraints apply per worker for worker in self.workers: - for week_blocks in self.get_week_block_iterator(4): # Prevent weekend shifts more than once every n weeks self.model.constraints.add( - self.constraint_options["max_shifts_per_month"] >= sum( - self.model.works[worker.id, week, day, shift.name] for week in week_blocks - for day in self.days for shift in self.get_shifts())) + self.constraint_options["max_shifts_per_month"] + >= sum( + self.model.works[worker.id, week, day, shift.name] + for week in week_blocks + for day in self.days + for shift in self.get_shifts() + ) + ) - - if self.constraint_options[ - "avoid_st2_first_month"] and worker.grade == 2: + if self.constraint_options["avoid_st2_first_month"] and worker.grade == 2: # Avoid ST1s on the first month try: - self.model.constraints.add(0 == sum( - self.model.works[worker.id, week, day, shift] for week, - day, shift in self.get_all_shiftname_combinations() - if week in (1, 2, 3, 4) and shift in ("night_weekday", "night_weekend"))) + self.model.constraints.add( + 0 + == sum( + self.model.works[worker.id, week, day, shift] + for week, day, shift in self.get_all_shiftname_combinations() + if week in (1, 2, 3, 4) + and shift in ("night_weekday", "night_weekend") + ) + ) except ValueError as e: print("Failure setting constraint", "avoid_st2_first_month") print(e) # Count number of weekends an worker works if self.constraint_options["balance_weekends"]: self.model.constraints.add( - self.model.worker_weekend_count[worker.id] == sum( - self.model.works_weekend[worker.id, week] - for week in self.weeks)) + self.model.worker_weekend_count[worker.id] + == sum( + self.model.works_weekend[worker.id, week] for week in self.weeks + ) + ) if self.constraint_options["max_weekends"]: self.model.constraints.add( - self.constraint_options["max_weekends"] >= - self.model.worker_weekend_count[worker.id]) + self.constraint_options["max_weekends"] + >= self.model.worker_weekend_count[worker.id] + ) # Balance shifts within required limits (set by balance_offset) # If balance_offset is too restrictive (for the rota length) # no solution will be possible for shift in self.get_shifts(): if ( - worker.site in shift.site + worker.site in shift.site ): # Each site specfies which sites self.workers can fullfill it # calaculate the total number of shifts that need assigning over the rota - #total_shifts = (len(self.weeks) * len(shift.shift_days) * + # total_shifts = (len(self.weeks) * len(shift.shift_days) * total_shifts = self.shift_counts[shift] * shift.workers_required - full_time_equivalent_joined = sum([ + full_time_equivalent_joined = sum( self.full_time_equivalent_sites[i] for i in shift.site - ]) + ) - target_shifts = (total_shifts / - full_time_equivalent_joined * - worker.fte_adj) + target_shifts = ( + total_shifts / full_time_equivalent_joined * worker.fte_adj + ) if self.use_previous_shifts: if shift.name in worker.previous_shifts: worked, allocated = worker.previous_shifts[shift.name] - target_shifts = target_shifts + float(allocated) - float(worked) + target_shifts = ( + target_shifts + float(allocated) - float(worked) + ) - #print(worker.name, shift.name, target_shifts) + # print(worker.name, shift.name, target_shifts) worker.shift_target_number[shift.name] = target_shifts if shift.hard_constrain_shift: adjusted_balance_offset = shift.balance_offset if worker.fte_adj < 100: - adjusted_balance_offset = adjusted_balance_offset * self.ltft_balance_offset + adjusted_balance_offset = ( + adjusted_balance_offset * self.ltft_balance_offset + ) - max_shifts = target_shifts + adjusted_balance_offset * self.balance_offset_modifier - min_shifts = target_shifts - adjusted_balance_offset * self.balance_offset_modifier + max_shifts = ( + target_shifts + + adjusted_balance_offset * self.balance_offset_modifier + ) + min_shifts = ( + target_shifts + - adjusted_balance_offset * self.balance_offset_modifier + ) self.model.constraints.add( inequality( min_shifts, - sum(self.model.works[worker.id, week, day, - shift.name] for week, day - in self.get_week_day_combinations()), + sum( + self.model.works[worker.id, week, day, shift.name] + for week, day in self.get_week_day_combinations() + ), max_shifts, - )) + ) + ) else: # Make sure shifts aren't assigned to those from other sites - self.model.constraints.add(0 == sum( - self.model.works[worker.id, week, day, shift.name] - for week, day in self.get_week_day_combinations())) + self.model.constraints.add( + 0 + == sum( + self.model.works[worker.id, week, day, shift.name] + for week, day in self.get_week_day_combinations() + ) + ) # model.shift_count stores the number of shifts that a worker is assigned to worker by shift # this is used (by the objective) to balance the total number of shifts worked self.model.constraints.add( - self.model.shift_count[worker.id, shift.name] == sum( + self.model.shift_count[worker.id, shift.name] + == sum( self.model.works[worker.id, week, day, shift.name] - for week, day in self.get_week_day_combinations())) + for week, day in self.get_week_day_combinations() + ) + ) # Define shift_count_t1 and shift_count_t2 constraints for the object # Thus bypassing the need for a quadratic solver @@ -805,21 +924,28 @@ class RotaBuilder(object): # t1+t2 approximates the absolute target (which otherwise requires a quadratic solver) if self.constraint_options["balance_shifts"]: self.model.constraints.add( - self.model.shift_count_t1[worker.id] - - self.model.shift_count_t2[worker.id] == sum( - (self.model.shift_count[worker.id, shift.name] - - worker.shift_target_number[shift.name]) * - shift.balance_weighting - for shift in self.get_shifts())) - #if "night" not in shift.constraints)) + self.model.shift_count_t1[worker.id] + - self.model.shift_count_t2[worker.id] + == sum( + ( + self.model.shift_count[worker.id, shift.name] + - worker.shift_target_number[shift.name] + ) + * shift.balance_weighting + for shift in self.get_shifts() + ) + ) + # if "night" not in shift.constraints)) if self.constraint_options["balance_bank_holidays"]: self.model.constraints.add( - self.model.bank_holiday_count[worker.id] == sum( - self.model.works[worker.id, week, day, shift] for week, - day, shift in self.get_all_shiftname_combinations() - if self.week_day_date_map[(week, - day)] in bank_holiday_map)) + self.model.bank_holiday_count[worker.id] + == sum( + self.model.works[worker.id, week, day, shift] + for week, day, shift in self.get_all_shiftname_combinations() + if self.week_day_date_map[(week, day)] in bank_holiday_map + ) + ) xU = len(self.get_bank_holiday_week_days()) + 1 xL = 1 @@ -828,28 +954,33 @@ class RotaBuilder(object): xL, self.model.bank_holiday_count[worker.id] + 1, xU, - )) + ) + ) self.model.constraints.add( - self.model.bank_holiday_count_w[worker.id] >= xL * - (self.model.bank_holiday_count[worker.id] + 1) * 2 - - xL * xL) + self.model.bank_holiday_count_w[worker.id] + >= xL * (self.model.bank_holiday_count[worker.id] + 1) * 2 - xL * xL + ) self.model.constraints.add( - self.model.bank_holiday_count_w[worker.id] >= xU * - (self.model.bank_holiday_count[worker.id] + 1) * 2 - - xU * xU) + self.model.bank_holiday_count_w[worker.id] + >= xU * (self.model.bank_holiday_count[worker.id] + 1) * 2 - xU * xU + ) if self.constraint_options["balance_nights"]: self.model.constraints.add( - self.model.night_shift_count[worker.id] == sum( + self.model.night_shift_count[worker.id] + == sum( self.model.works[worker.id, week, day, shift.name] for week, day in self.get_week_day_combinations() - for shift in self.get_shifts_with_constraint("night"))) + for shift in self.get_shifts_with_constraint("night") + ) + ) night_shift_target_number = sum( worker.shift_target_number[shift.name] - for shift in self.get_shifts_with_constraint("night")) + for shift in self.get_shifts_with_constraint("night") + ) # min_shifts = night_shift_target_number - 20 # max_shifts = night_shift_target_number + 20 @@ -862,10 +993,11 @@ class RotaBuilder(object): # )) self.model.constraints.add( - self.model.night_shift_count_t1[worker.id] - - self.model.night_shift_count_t2[worker.id] == - self.model.night_shift_count[worker.id] - - night_shift_target_number) + self.model.night_shift_count_t1[worker.id] + - self.model.night_shift_count_t2[worker.id] + == self.model.night_shift_count[worker.id] + - night_shift_target_number + ) # This may need to be updated xU = 6 @@ -873,22 +1005,36 @@ class RotaBuilder(object): self.model.constraints.add( inequality( xL, - self.model.night_shift_count_t1[worker.id] + - self.model.night_shift_count_t2[worker.id] + 1, + self.model.night_shift_count_t1[worker.id] + + self.model.night_shift_count_t2[worker.id] + + 1, xU, - )) + ) + ) self.model.constraints.add( - self.model.night_shift_count_w[worker.id] >= xL * - (self.model.night_shift_count_t1[worker.id] + - self.model.night_shift_count_t2[worker.id] + 1) * 2 - - xL * xL) + self.model.night_shift_count_w[worker.id] + >= xL + * ( + self.model.night_shift_count_t1[worker.id] + + self.model.night_shift_count_t2[worker.id] + + 1 + ) + * 2 + - xL * xL + ) self.model.constraints.add( - self.model.night_shift_count_w[worker.id] >= xU * - (self.model.night_shift_count_t1[worker.id] + - self.model.night_shift_count_t2[worker.id] + 1) * 2 - - xU * xU) + self.model.night_shift_count_w[worker.id] + >= xU + * ( + self.model.night_shift_count_t1[worker.id] + + self.model.night_shift_count_t2[worker.id] + + 1 + ) + * 2 + - xU * xU + ) # self.model.constraints.add( # self.model.night_shift_count_w[worker.id] >= 0) @@ -897,9 +1043,10 @@ class RotaBuilder(object): # This works as long as weekend shifts are assigned as blocks! if self.constraint_options["balance_weekends"]: weekend_shift_target_number = sum( - worker.shift_target_number[shift.name] / - len(shift.shift_days) for shift in self.get_shifts() - if "Sat" in shift.shift_days or "Sun" in shift.shift_days) + worker.shift_target_number[shift.name] / len(shift.shift_days) + for shift in self.get_shifts() + if "Sat" in shift.shift_days or "Sun" in shift.shift_days + ) worker.weekend_shift_target_number = weekend_shift_target_number @@ -914,10 +1061,11 @@ class RotaBuilder(object): # )) self.model.constraints.add( - self.model.weekend_shift_count_t1[worker.id] - - self.model.weekend_shift_count_t2[worker.id] == - self.model.worker_weekend_count[worker.id] - - weekend_shift_target_number) + self.model.weekend_shift_count_t1[worker.id] + - self.model.weekend_shift_count_t2[worker.id] + == self.model.worker_weekend_count[worker.id] + - weekend_shift_target_number + ) xU = self.constraint_options["max_weekends"] @@ -925,127 +1073,192 @@ class RotaBuilder(object): self.model.constraints.add( inequality( xL, - self.model.weekend_shift_count_t1[worker.id] + - self.model.weekend_shift_count_t2[worker.id] + 1, + self.model.weekend_shift_count_t1[worker.id] + + self.model.weekend_shift_count_t2[worker.id] + + 1, xU, - )) + ) + ) self.model.constraints.add( - self.model.weekend_shift_count_w[worker.id] >= xL * - (self.model.weekend_shift_count_t1[worker.id] + - self.model.weekend_shift_count_t2[worker.id] + 1) * 2 - - xL * xL) + self.model.weekend_shift_count_w[worker.id] + >= xL + * ( + self.model.weekend_shift_count_t1[worker.id] + + self.model.weekend_shift_count_t2[worker.id] + + 1 + ) + * 2 + - xL * xL + ) self.model.constraints.add( - self.model.weekend_shift_count_w[worker.id] >= xU * - (self.model.weekend_shift_count_t1[worker.id] + - self.model.weekend_shift_count_t2[worker.id] + 1) * 2 - - xU * xU) + self.model.weekend_shift_count_w[worker.id] + >= xU + * ( + self.model.weekend_shift_count_t1[worker.id] + + self.model.weekend_shift_count_t2[worker.id] + + 1 + ) + * 2 + - xU * xU + ) # Ensure worker is not allocated shifts on non working days if worker.nwd: for week, day, shift in self.get_all_shiftclass_combinations(): for n, start, end in worker.nwd: if not shift.rota_on_nwds and day == n: - #print(start, self.week_day_date_map[(week, day)], end) + # print(start, self.week_day_date_map[(week, day)], end) if start <= self.week_day_date_map[(week, day)] <= end: self.model.constraints.add( - 0 == self.model.works[worker.id, week, day, - shift.name]) + 0 + == self.model.works[ + worker.id, week, day, shift.name + ] + ) if self.constraint_options["balance_blocks"]: for week_blocks in self.get_week_block_iterator( - self.max_night_frequency): + self.max_night_frequency + ): if self.get_shifts_with_constraint("night"): # Prevent nights more than once every n weeks - self.model.constraints.add(1 >= sum( - self.model.shift_week_worker_assigned[shift.name, - week, - worker.id] - for week in week_blocks - for shift in self.get_shifts_with_constraint( - "night"))) + self.model.constraints.add( + 1 + >= sum( + self.model.shift_week_worker_assigned[ + shift.name, week, worker.id + ] + for week in week_blocks + for shift in self.get_shifts_with_constraint("night") + ) + ) for week_blocks in self.get_week_block_iterator( - self.max_weekend_frequency): + self.max_weekend_frequency + ): # Prevent weekend shifts more than once every n weeks self.model.constraints.add( - 1 >= sum(self.model.works_weekend[worker.id, week] - for week in week_blocks)) + 1 + >= sum( + self.model.works_weekend[worker.id, week] + for week in week_blocks + ) + ) for week in self.weeks: - self.model.constraints.add(self.constraint_options["max_shifts_per_week"] >= sum( - self.model.works[worker.id, week, day, shift.name] - for day in self.days for shift in self.get_shifts())) - - for shift in self.get_shifts_with_constraint( - "max_2_shifts_per_week"): - self.model.constraints.add(2 >= sum( + self.model.constraints.add( + self.constraint_options["max_shifts_per_week"] + >= sum( self.model.works[worker.id, week, day, shift.name] - for day in self.days)) + for day in self.days + for shift in self.get_shifts() + ) + ) - if worker.site in self.constraint_options[ - "prevent_monday_after_full_weekends"]: + for shift in self.get_shifts_with_constraint("max_2_shifts_per_week"): + self.model.constraints.add( + 2 + >= sum( + self.model.works[worker.id, week, day, shift.name] + for day in self.days + ) + ) + + if ( + worker.site + in self.constraint_options["prevent_monday_after_full_weekends"] + ): # Ignore last week if week + 1 in self.weeks: self.model.constraints.add( - full_weekend_count >= sum(self.model.works[worker.id, week, "Sat", - shift.name] - for shift in self.get_shifts()) + - sum(self.model.works[worker.id, week, "Sun", - shift.name] - for shift in self.get_shifts()) + - sum(self.model.works[worker.id, week + 1, "Mon", - shift.name] - for shift in self.get_shifts())) - if worker.site in self.constraint_options[ - "prevent_monday_and_tuesday_after_full_weekends"]: + full_weekend_count + >= sum( + self.model.works[worker.id, week, "Sat", shift.name] + for shift in self.get_shifts() + ) + + sum( + self.model.works[worker.id, week, "Sun", shift.name] + for shift in self.get_shifts() + ) + + sum( + self.model.works[worker.id, week + 1, "Mon", shift.name] + for shift in self.get_shifts() + ) + ) + if ( + worker.site + in self.constraint_options[ + "prevent_monday_and_tuesday_after_full_weekends" + ] + ): # Ignore last week if week + 1 in self.weeks: self.model.constraints.add( - full_weekend_count >= sum(self.model.works[worker.id, week, "Sat", - shift.name] - for shift in self.get_shifts()) + - sum(self.model.works[worker.id, week, "Sun", - shift.name] - for shift in self.get_shifts()) + - sum(self.model.works[worker.id, week + 1, "Mon", - shift.name] - for shift in self.get_shifts()) + - sum(self.model.works[worker.id, week + 1, "Tue", - shift.name] - for shift in self.get_shifts())) - if worker.site in self.constraint_options[ - "prevent_fridays_before_full_weekends"]: + full_weekend_count + >= sum( + self.model.works[worker.id, week, "Sat", shift.name] + for shift in self.get_shifts() + ) + + sum( + self.model.works[worker.id, week, "Sun", shift.name] + for shift in self.get_shifts() + ) + + sum( + self.model.works[worker.id, week + 1, "Mon", shift.name] + for shift in self.get_shifts() + ) + + sum( + self.model.works[worker.id, week + 1, "Tue", shift.name] + for shift in self.get_shifts() + ) + ) + if ( + worker.site + in self.constraint_options["prevent_fridays_before_full_weekends"] + ): self.model.constraints.add( - full_weekend_count >= sum(self.model.works[worker.id, week, "Sat", - shift.name] - for shift in self.get_shifts() - if "night" not in shift.constraints) + - sum(self.model.works[worker.id, week, "Sun", - shift.name] + full_weekend_count + >= sum( + self.model.works[worker.id, week, "Sat", shift.name] for shift in self.get_shifts() - if "night" not in shift.constraints) + - sum(self.model.works[worker.id, week, "Fri", - shift.name] + if "night" not in shift.constraints + ) + + sum( + self.model.works[worker.id, week, "Sun", shift.name] for shift in self.get_shifts() - if "night" not in shift.constraints)) - if worker.site in self.constraint_options[ - "prevent_thursdays_before_full_weekends"]: + if "night" not in shift.constraints + ) + + sum( + self.model.works[worker.id, week, "Fri", shift.name] + for shift in self.get_shifts() + if "night" not in shift.constraints + ) + ) + if ( + worker.site + in self.constraint_options["prevent_thursdays_before_full_weekends"] + ): self.model.constraints.add( - full_weekend_count >= sum(self.model.works[worker.id, week, "Sat", - shift.name] - for shift in self.get_shifts() - if "night" not in shift.constraints) + - sum(self.model.works[worker.id, week, "Sun", - shift.name] + full_weekend_count + >= sum( + self.model.works[worker.id, week, "Sat", shift.name] for shift in self.get_shifts() - if "night" not in shift.constraints) + - sum(self.model.works[worker.id, week, "Thu", - shift.name] + if "night" not in shift.constraints + ) + + sum( + self.model.works[worker.id, week, "Sun", shift.name] for shift in self.get_shifts() - if "night" not in shift.constraints)) + if "night" not in shift.constraints + ) + + sum( + self.model.works[worker.id, week, "Thu", shift.name] + for shift in self.get_shifts() + if "night" not in shift.constraints + ) + ) # # model.weekend_count stores the number of weekend shifts that a worker is assigned to wor # # this is used (by the objective) to balance the total number of weekend shifts worked @@ -1062,15 +1275,22 @@ class RotaBuilder(object): # for shift in self.get_shifts()) / 2) if self.constraint_options["balance_weekends"]: self.model.constraints.add( - self.model.works_weekend[worker.id, week] >= sum( + self.model.works_weekend[worker.id, week] + >= sum( self.model.works[worker.id, week, day, shift.name] for day in self.days[5:] - for shift in self.get_shifts()) / 2) + for shift in self.get_shifts() + ) + / 2 + ) self.model.constraints.add( - self.model.works_weekend[worker.id, week] <= sum( + self.model.works_weekend[worker.id, week] + <= sum( self.model.works[worker.id, week, day, shift.name] for day in self.days[5:] - for shift in self.get_shifts())) + for shift in self.get_shifts() + ) + ) # self.model.constraints.add( # self.model.works_saturday[worker.id, week] == sum( # self.model.works[worker.id, week, "Sat", shift.name] @@ -1091,11 +1311,15 @@ class RotaBuilder(object): # Force night shifts to be assigned in blocks self.model.constraints.add( - self.model.shift_week_worker_assigned[shift.name, week, - worker.id] * - len(shift.shift_days) == sum( + self.model.shift_week_worker_assigned[ + shift.name, week, worker.id + ] + * len(shift.shift_days) + == sum( self.model.works[worker.id, week, day, shift.name] - for day in shift.shift_days)) + for day in shift.shift_days + ) + ) # @@ -1140,29 +1364,46 @@ class RotaBuilder(object): if self.get_shift_names_by_week_day(week, day): # Unable to work (hard constraint not preference) self.model.constraints.add( - self.model.available[worker.id, week, day] >= sum( + self.model.available[worker.id, week, day] + >= sum( self.model.works[worker.id, week, day, shift] - for shift in self.get_shift_names_by_week_day(week, day))) + for shift in self.get_shift_names_by_week_day(week, day) + ) + ) # single shift per day - self.model.constraints.add(1 >= sum( - self.model.works[worker.id, week, day, shift] - for shift in self.get_shift_names_by_week_day(week, day))) + self.model.constraints.add( + 1 + >= sum( + self.model.works[worker.id, week, day, shift] + for shift in self.get_shift_names_by_week_day(week, day) + ) + ) if self.constraint_options["hard_constrain_pair_separation"]: for worker_pairs in self.worker_pairs: if worker_pairs[0] == worker: - self.model.constraints.add(1 >= sum(self.model.works[w.id, week, day, shift] for shift in self.get_shift_names_by_week_day(week, day) for w in worker_pairs)) + self.model.constraints.add( + 1 + >= sum( + self.model.works[w.id, week, day, shift] + for shift in self.get_shift_names_by_week_day( + week, day + ) + for w in worker_pairs + ) + ) # if working a night ensure preceeding (1) or subsequent (2) shifts can only be nights if self.constraint_options["constrain_time_off_after_nights"]: - for constraint_shift in self.get_shifts_with_constraint( - "night"): + for constraint_shift in self.get_shifts_with_constraint("night"): # Ensure night prior to unavalibity is not assigned self.model.constraints.add( - self.model.available[worker.id, week, day] >= - self.model.works[worker.id, pweek, pday, - constraint_shift.name]) + self.model.available[worker.id, week, day] + >= self.model.works[ + worker.id, pweek, pday, constraint_shift.name + ] + ) # IF paired we check the following against both workers workers = [worker] @@ -1171,24 +1412,37 @@ class RotaBuilder(object): if worker_pairs[0] == worker: workers = worker_pairs - #print("Workers", workers) - + # print("Workers", workers) self.model.constraints.add( - 1 >= self.model.works[worker.id, week, day, - constraint_shift.name] + - sum(n1 * - self.model.works[w.id, nweek, nday, shift] - for shift in self.get_shift_names_by_week_day(nweek, nday) - if shift != constraint_shift.name for w in workers)) + 1 + >= self.model.works[ + worker.id, week, day, constraint_shift.name + ] + + sum( + n1 * self.model.works[w.id, nweek, nday, shift] + for shift in self.get_shift_names_by_week_day( + nweek, nday + ) + if shift != constraint_shift.name + for w in workers + ) + ) self.model.constraints.add( - 1 >= self.model.works[worker.id, week, day, - constraint_shift.name] + - sum(n2 * self.model.works[w.id, n2week, n2day, - shift] - for shift in self.get_shift_names_by_week_day(n2week, n2day) - if shift != constraint_shift.name for w in workers)) + 1 + >= self.model.works[ + worker.id, week, day, constraint_shift.name + ] + + sum( + n2 * self.model.works[w.id, n2week, n2day, shift] + for shift in self.get_shift_names_by_week_day( + n2week, n2day + ) + if shift != constraint_shift.name + for w in workers + ) + ) # self.model.constraints.add( # 1 >= self.model.works[worker.id, week, day, # constraint_shift.name] + @@ -1197,19 +1451,33 @@ class RotaBuilder(object): # for shift in self.get_shift_names_by_week_day(week, n3day) # if shift != constraint_shift.name)) self.model.constraints.add( - 1 >= self.model.works[worker.id, week, day, - constraint_shift.name] + - sum(p1 * - self.model.works[w.id, pweek, pday, shift] - for shift in self.get_shift_names_by_week_day(pweek, pday) - if shift != constraint_shift.name for w in workers)) + 1 + >= self.model.works[ + worker.id, week, day, constraint_shift.name + ] + + sum( + p1 * self.model.works[w.id, pweek, pday, shift] + for shift in self.get_shift_names_by_week_day( + pweek, pday + ) + if shift != constraint_shift.name + for w in workers + ) + ) self.model.constraints.add( - 1 >= self.model.works[worker.id, week, day, - constraint_shift.name] + - sum(p2 * self.model.works[w.id, p2week, p2day, - shift] - for shift in self.get_shift_names_by_week_day(p2week, p2day) - if shift != constraint_shift.name for w in workers)) + 1 + >= self.model.works[ + worker.id, week, day, constraint_shift.name + ] + + sum( + p2 * self.model.works[w.id, p2week, p2day, shift] + for shift in self.get_shift_names_by_week_day( + p2week, p2day + ) + if shift != constraint_shift.name + for w in workers + ) + ) self.define_objectives() @@ -1222,70 +1490,85 @@ class RotaBuilder(object): balance_modifier_constant = 1 if self.constraint_options["balance_shifts"]: - shift_balancing = sum(balance_modifier_constant * - (self.model.shift_count_t1[(worker.id)] + - self.model.shift_count_t2[(worker.id)]) - for worker in self.workers) + shift_balancing = sum( + balance_modifier_constant + * ( + self.model.shift_count_t1[(worker.id)] + + self.model.shift_count_t2[(worker.id)] + ) + for worker in self.workers + ) else: shift_balancing = 0 if self.constraint_options["balance_nights"]: night_balance_modifier_constant = 10 night_shift_balancing = sum( - night_balance_modifier_constant * - self.model.night_shift_count_w[(worker.id)] + night_balance_modifier_constant + * self.model.night_shift_count_w[(worker.id)] # (self.model.night_shift_count_t1[(worker.id)] + # self.model.night_shift_count_t2[(worker.id)]) - for worker in self.workers) + for worker in self.workers + ) else: night_shift_balancing = 0 if self.constraint_options["balance_bank_holidays"]: bank_holiday_balance_modifier_constant = 1000 bank_holiday_balancing = sum( - bank_holiday_balance_modifier_constant * - (self.model.bank_holiday_count_w[(worker.id)] - 1) + bank_holiday_balance_modifier_constant + * (self.model.bank_holiday_count_w[(worker.id)] - 1) # (self.model.night_shift_count_t1[(worker.id)] + # self.model.night_shift_count_t2[(worker.id)]) - for worker in self.workers) + for worker in self.workers + ) else: bank_holiday_balancing = 0 if self.constraint_options["balance_weekends"]: weekend_balance_modifier_constant = 5 weekend_shift_balancing = sum( - weekend_balance_modifier_constant * - self.model.weekend_shift_count_w[(worker.id)] - for worker in self.workers) + weekend_balance_modifier_constant + * self.model.weekend_shift_count_w[(worker.id)] + for worker in self.workers + ) else: weekend_shift_balancing = 0 preference_constant = 10 # Preferences (not to work) preferences = sum( - self.model.pref_not_to_work[worker.id, week, day] * - self.model.works[worker.id, week, day, shift] * - preference_constant for worker in self.workers - for week, day, shift in self.get_all_shiftname_combinations()) + self.model.pref_not_to_work[worker.id, week, day] + * self.model.works[worker.id, week, day, shift] + * preference_constant + for worker in self.workers + for week, day, shift in self.get_all_shiftname_combinations() + ) # Work requsets work_request_constant = 10000 # Needs to be very big to override loss from bank holiday requests work_requests = sum( - self.model.work_requests[worker.id, week, day, shift] * - self.model.works[worker.id, week, day, shift] * - work_request_constant for worker in self.workers - for week, day, shift in self.get_all_shiftname_combinations()) + self.model.work_requests[worker.id, week, day, shift] + * self.model.works[worker.id, week, day, shift] + * work_request_constant + for worker in self.workers + for week, day, shift in self.get_all_shiftname_combinations() + ) # # Spread nights if self.constraint_options["balance_nights_across_sites"]: nights_site_balancing = sum( - (self.model.night_per_site_t1[week, shift.name, site] + - self.model.night_per_site_t2[week, shift.name, site]) * 20 - #self.model.night_per_site2[week, block, site] + ( + self.model.night_per_site_t1[week, shift.name, site] + + self.model.night_per_site_t2[week, shift.name, site] + ) + * 20 + # self.model.night_per_site2[week, block, site] for week in self.weeks for shift in self.get_shifts_with_constraint("night") - for site in self.sites) + for site in self.sites + ) else: nights_site_balancing = 0 @@ -1293,25 +1576,34 @@ class RotaBuilder(object): blocks_balancing = sum( 1 * self.model.blocks_assigned[week, shift] for week in self.weeks - for shift in self.shifts_to_assign_as_blocks()) + for shift in self.shifts_to_assign_as_blocks() + ) else: blocks_balancing = 0 # Quadratic :( - #worker_pairs_balancing = 0 - #worker_pairs_constant = 100000 - #if self.worker_pairs: + # worker_pairs_balancing = 0 + # worker_pairs_constant = 100000 + # if self.worker_pairs: # for worker_a, worker_b in self.worker_pairs: # print(worker_a, worker_b) # for week, day in self.get_week_day_combinations(): - # worker_pairs_balancing = worker_pairs_balancing + sum(self.model.works[worker_a.id, week, day, shift] for shift in self.get_shift_names_by_week_day(week, day)) * sum(self.model.works[worker_b.id, week, day, shift] for shift in self.get_shift_names_by_week_day(week, day)) * worker_pairs_constant + # worker_pairs_balancing = worker_pairs_balancing + sum(self.model.works[worker_a.id, week, day, shift] for shift in self.get_shift_names_by_week_day(week, day)) * sum(self.model.works[worker_b.id, week, day, shift] for shift in self.get_shift_names_by_week_day(week, day)) * worker_pairs_constant - - #return weekend_shift_balancing + blocks_balancing - #return bank_holiday_balancing - #return shift_balancing + preferences + blocks_balancing - #return shift_balancing + preferences + nights_site_balancing + blocks_balancing - return weekend_shift_balancing + shift_balancing + night_shift_balancing + preferences + nights_site_balancing + bank_holiday_balancing + blocks_balancing - work_requests + # return weekend_shift_balancing + blocks_balancing + # return bank_holiday_balancing + # return shift_balancing + preferences + blocks_balancing + # return shift_balancing + preferences + nights_site_balancing + blocks_balancing + return ( + weekend_shift_balancing + + shift_balancing + + night_shift_balancing + + preferences + + nights_site_balancing + + bank_holiday_balancing + + blocks_balancing + - work_requests + ) # add objective function to the model. rule (pass function) or expr (pass expression directly) self.model.obj = Objective(rule=obj_rule, sense=minimize) @@ -1337,18 +1629,19 @@ class RotaBuilder(object): Must be called prior to attempting to solve """ - #self.build_shifts() + # self.build_shifts() self.workers = sorted(self.workers) - self.full_time_equivalent = sum([w.fte_adj for w in self.workers]) + self.full_time_equivalent = sum(w.fte_adj for w in self.workers) self.full_time_equivalent_sites = {} self.workers_at_sites = {} for site in self.sites: self.workers_at_sites[site] = [w for w in self.workers if w.site == site] self.full_time_equivalent_sites[site] = sum( - [w.fte_adj for w in self.workers if w.site == site]) + w.fte_adj for w in self.workers if w.site == site + ) pairs = defaultdict(list) for w in self.workers: @@ -1358,7 +1651,6 @@ class RotaBuilder(object): for p in pairs: self.worker_pairs.append(tuple(pairs[p])) - def add_shift(self, shift): """Add a shift to the collection @@ -1369,7 +1661,7 @@ class RotaBuilder(object): def add_shifts(self, *shifts: SingleShift): """Add multiple shifts - + Returns: None """ @@ -1387,17 +1679,17 @@ class RotaBuilder(object): def get_shift_by_name(self, name): """ - :param name: + :param name: """ return self.shifts_by_name[name] def get_shift_length_by_name(self, name): """Get the length of a shift - + Args: name (str): Name of a shift - + Returns: int: Length of the shift """ @@ -1408,14 +1700,13 @@ class RotaBuilder(object): self.shifts_by_name = {} self.shift_names = [] # type: List[ShiftName] - #self.week_day_shifts_dict = {(week, day): set() for week in self.weeks for day in days} + # self.week_day_shifts_dict = {(week, day): set() for week in self.weeks for day in days} self.week_day_shifts_dict = {} self.sites = set() - self.week_day_shift_product = [] self.week_day_shiftclass_product = [] - + self.shift_counts = defaultdict(int) for week, day in self.weeks_days_product: self.week_day_shifts_dict[(week, day)] = set() @@ -1432,17 +1723,17 @@ class RotaBuilder(object): self.week_day_shiftclass_product.append((week, day, s)) self.week_day_shifts_dict[(week, day)].add(s.name) self.shift_counts[s] = self.shift_counts[s] + 1 - #print(self.week_day_shift_product) + # print(self.week_day_shift_product) for s in self.shifts: self.shifts_by_name[s.name] = s self.shift_names.append(s.name) - #for day in s.shift_days: + # for day in s.shift_days: # self.week_day_shifts_dict[(week, day)].add(s.name) for site in s.site: - self.sites.add(site) - + self.sites.add(site) + # Todo replace with week_day..... self.day_shift_product = [] self.day_shiftclass_product = [] @@ -1454,34 +1745,33 @@ class RotaBuilder(object): def get_day_shiftname_combinations(self): """Returns a list of all required day / shift combinations - + Returns: list: list of in the following format (str->day, str->shift) """ return self.day_shift_product - def get_day_shiftclass_combinations( - self) -> List[Tuple[DayStr, SingleShift]]: + def get_day_shiftclass_combinations(self) -> List[Tuple[DayStr, SingleShift]]: """Returns a list of all required day / shift combinations - + Returns: list: list of in the following format (str->day, shiftObject->shift) """ return self.day_shiftclass_product - def get_all_shiftname_combinations( - self) -> List[Tuple[WeekInt, DayStr, ShiftName]]: + def get_all_shiftname_combinations(self) -> List[Tuple[WeekInt, DayStr, ShiftName]]: """Returns a list of all possible week / day / shift combinations - + Returns: list: contains tuple of all possible week / day / shift combinations """ return self.week_day_shift_product def get_all_shiftclass_combinations( - self, ) -> List[Tuple[WeekInt, DayStr, SingleShift]]: + self, + ) -> List[Tuple[WeekInt, DayStr, SingleShift]]: """Returns a list of all possible week / day / shift combinations - + Returns: list: contains tuple of all possible week / day / shift combinations """ @@ -1498,16 +1788,14 @@ class RotaBuilder(object): def get_shifts(self) -> List[SingleShift]: """Returns a list of all the registered shifts - + Returns: List[SingleShift]: list of registered shifts (as SingleShift) """ return self.shifts def get_shifts_with_constraint(self, constraint) -> List[SingleShift]: - return [ - shift for shift in self.shifts if constraint in shift.constraints - ] + return [shift for shift in self.shifts if constraint in shift.constraints] def get_shift_names(self) -> List[ShiftName]: """Returns a list of all the registered shift names @@ -1526,29 +1814,28 @@ class RotaBuilder(object): [ 2, 3, 4, 5], ... ] - + Args: block_length (int): length of blocks to create - + Returns: list: two dimensional list containing weeks in blocks """ blocks = [] for i in range(len(self.weeks)): - blocks.append(self.weeks[i:i + block_length]) + blocks.append(self.weeks[i : i + block_length]) return blocks def get_required_workers_and_site_combinations(self): """Returns a list of all possible shifts, the workers required and site - + Returns: list: list (week, day, shift name, workers required, shift site) """ l = [] for week, day, shift in self.week_day_shiftclass_product: - #if day in shift.shift_days: - l.append((week, day, shift.name, shift.workers_required, - shift.site)) + # if day in shift.shift_days: + l.append((week, day, shift.name, shift.workers_required, shift.site)) return l @@ -1556,7 +1843,7 @@ class RotaBuilder(object): """Returns a set of all possible shifts combinations that are not required Includes those on days - + Returns: list: (week, day, shift) """ @@ -1570,20 +1857,16 @@ class RotaBuilder(object): return l - set(self.get_all_shiftclass_combinations()) def shifts_to_assign_as_blocks(self): - return [ - shift.name for shift in self.get_shifts() if shift.assign_as_block - ] + return [shift.name for shift in self.get_shifts() if shift.assign_as_block] def shifts_to_force_as_blocks(self): - return [ - shift.name for shift in self.get_shifts() if shift.force_as_block - ] + return [shift.name for shift in self.get_shifts() if shift.force_as_block] def shifts_to_assign_or_force_as_blocks(self): s = self.shifts_to_assign_as_blocks() s.extend(self.shifts_to_force_as_blocks()) return s - + def get_workers_for_shift(self, shift): return [worker for worker in self.workers if worker.site in shift.site] @@ -1594,26 +1877,29 @@ class RotaBuilder(object): w = defaultdict(list) for worker in self.workers: - #print(worker) + # print(worker) w[worker.site].append(worker) l = [] for site in w: - l.append("{}: {}".format( - site, - sum([worker.fte_adj for worker in w[site]]) / 100)) + l.append( + "{}: {}".format(site, sum(worker.fte_adj for worker in w[site]) / 100) + ) t = "\n".join(l) return "Full time equivalent trainees by site:\n{}".format(t) def get_bank_holiday_week_days(self): - return ([(week, day) for week, day in self.get_week_day_combinations() - if self.week_day_date_map[(week, day)] in bank_holiday_map]) + return [ + (week, day) + for week, day in self.get_week_day_combinations() + if self.week_day_date_map[(week, day)] in bank_holiday_map + ] class RotaResults(object): - def __init__(self, rota, results): + def __init__(self, rota): self.rota = rota - self.results = results + # self.results = results def export_rota_to_html(self, filename="rota"): with open("{}.html".format(filename), "w") as f: @@ -1621,7 +1907,7 @@ class RotaResults(object): def export_rota_to_csv(self, filename="rota"): works = self.rota.model.works - with open("{}.csv".format(filename), 'w', newline='') as f: + with open("{}.csv".format(filename), "w", newline="") as f: wr = csv.writer(f, quoting=csv.QUOTE_ALL) l = ["Name"] l.extend([worker.name for worker in self.rota.workers]) @@ -1656,8 +1942,7 @@ class RotaResults(object): works = self.rota.model.works week_table = { week: { - day: {shift: [] - for shift in self.rota.get_shift_names()} + day: {shift: [] for shift in self.rota.get_shift_names()} for day in days } for week in self.rota.weeks @@ -1666,17 +1951,13 @@ class RotaResults(object): for worker in self.rota.workers: for day, shift in self.rota.get_day_shiftname_combinations(): if works[worker.id, week, day, shift].value == 1: - week_table[week][day][shift].append( - worker.get_details()) + week_table[week][day][shift].append(worker.get_details()) return week_table def get_worker_timetable(self): works = self.rota.model.works timetable = { - worker.name: - {week: {day: "" - for day in days} - for week in self.rota.weeks} + worker.name: {week: {day: "" for day in days} for week in self.rota.weeks} for worker in self.rota.workers } for worker in self.rota.workers: @@ -1686,15 +1967,16 @@ class RotaResults(object): timetable[worker.name][week][day] = shift return timetable - def get_worker_timetable_brief(self, - show_prefs=False, - marker_every=30, - show_unavailable=False): + def get_worker_timetable_brief( + self, show_prefs=False, marker_every=30, show_unavailable=False + ): model = self.rota.model week_string = "{:20}".format("-Week-") + "".join( - [7 * str("{}".format(w))[-1:] for w in self.rota.weeks]) + [7 * str("{}".format(w))[-1:] for w in self.rota.weeks] + ) days_string = "{:20}".format("-Day-") + "".join( - "MTWTFSS" * len(self.rota.weeks)) + "MTWTFSS" * len(self.rota.weeks) + ) timetable = [] for worker in self.rota.workers: shifts = [] @@ -1709,11 +1991,11 @@ class RotaResults(object): shift_count = "" for s in set(shifts): - shift_count = shift_count + "{}: {}, ".format( - s, shifts.count(s)) + shift_count = shift_count + "{}: {}, ".format(s, shifts.count(s)) shift_count = shift_count + "#weekends_worked: {}\\#".format( - model.worker_weekend_count[worker.id].value) + model.worker_weekend_count[worker.id].value + ) timetable.append("{} {}".format("".join(w), shift_count)) if show_prefs: @@ -1747,32 +2029,40 @@ class RotaResults(object): timetable.insert(0, days_string) return "\n".join(timetable) - def get_worker_timetable_html(self, - include_html_tag=False, - table_name="rota-table"): + def get_worker_timetable_html( + self, include_html_tag=False, table_name="rota-table" + ): model = self.rota.model timetable = [] - timetable.append("

Rota start date: {} ({} weeks)

".format(self.rota.start_date.isoformat(), self.rota.weeks[-1])) + timetable.append( + "

Rota start date: {} ({} weeks)

".format( + self.rota.start_date.isoformat(), self.rota.weeks[-1] + ) + ) date_row = [""] n = 0 for week, day in self.rota.get_week_day_combinations(): d = self.rota.start_date + datetime.timedelta(n) - date_row.append("Week {}: {}".format( - d, week, day)) + date_row.append("Week {}: {}".format(d, week, day)) n = n + 1 - timetable.append("{}".format( - "".join(date_row))) + timetable.append("{}".format("".join(date_row))) current_site = "" for worker in self.rota.workers: if worker.site != current_site: try: - timetable.append("{} n={} fte={}".format(worker.site, len(self.rota.workers_at_sites[worker.site]), self.rota.full_time_equivalent_sites[worker.site])) + timetable.append( + "{} n={} fte={}".format( + worker.site, + len(self.rota.workers_at_sites[worker.site]), + self.rota.full_time_equivalent_sites[worker.site], + ) + ) except KeyError as e: print(e) current_site = worker.site @@ -1804,6 +2094,7 @@ class RotaResults(object): a = shift[0] shift_name = shift break + # If we haven't run just add the shift title = "{} ({})".format(shift_name, d) css_class = day unavailable_reason = "" @@ -1813,7 +2104,9 @@ class RotaResults(object): available = False css_class = "unavailable" try: - unavailable_reason = self.rota.unavailable_to_work_reason[(worker.id, week, day)] + unavailable_reason = self.rota.unavailable_to_work_reason[ + (worker.id, week, day) + ] except KeyError: print("Error getting reason") print(worker.id, worker.name) @@ -1824,20 +2117,31 @@ class RotaResults(object): bank_holiday = "" if d in bank_holiday_map: css_class = " ".join((css_class, "bank-holiday")) - bank_holiday = " data-bank-holiday='{}'".format( - bank_holiday_map[d]) + bank_holiday = " data-bank-holiday='{}'".format(bank_holiday_map[d]) requests = "" if (worker.id, week, day) in self.rota.work_requests_map: css_class = " ".join((css_class, "shift-requested")) title = " ".join((title, "[REQUESTED]")) requests = " data-shift-request='{}'".format( - self.rota.work_requests_map[(worker.id, week, day)]) + self.rota.work_requests_map[(worker.id, week, day)] + ) shift_tds.append( - "{}" - .format(title, css_class, shift_name, available, unavailable_reason, d, week, - day, requests, bank_holiday, a)) + "{}".format( + title, + css_class, + shift_name, + available, + unavailable_reason, + d, + week, + day, + requests, + bank_holiday, + a, + ) + ) shift_count = "" shift_count_dict = {} @@ -1847,22 +2151,31 @@ class RotaResults(object): shift_count = shift_count + "{}: {}, ".format(s, c) worker_td = "{name} ({grade}) [{fte}]".format( - site=worker.site, nwds=nwds, name=worker.name, - fte=worker.fte, fte_adj=worker.fte_adj, end_date=worker.end_date, targets=worker_targets, + site=worker.site, + nwds=nwds, + name=worker.name, + fte=worker.fte, + fte_adj=worker.fte_adj, + end_date=worker.end_date, + targets=worker_targets, shift_counts=json.dumps(shift_count_dict), - weekend_target=worker.weekend_shift_target_number, nights_at_derriford=worker.night_at_derriford, grade=worker.grade, pair=worker.pair - ) + weekend_target=worker.weekend_shift_target_number, + nights_at_derriford=worker.night_at_derriford, + grade=worker.grade, + pair=worker.pair, + ) shift_count = shift_count + "#weekends_worked: {}\\#".format( - model.worker_weekend_count[worker.id].value) + model.worker_weekend_count[worker.id].value + ) bank_holiday_count = model.bank_holiday_count[worker.id].value - bank_holiday_count_w = model.bank_holiday_count_w[ - worker.id].value - 1 - #print(worker.name, bank_holiday_count, bank_holiday_count_w) - timetable.append("{}{}".format( - worker_td, "".join(shift_tds))) - #timetable.append("{}".format("".join(w), shift_count)) + bank_holiday_count_w = model.bank_holiday_count_w[worker.id].value - 1 + # print(worker.name, bank_holiday_count, bank_holiday_count_w) + timetable.append( + "{}{}".format(worker_td, "".join(shift_tds)) + ) + # timetable.append("{}".format("".join(w), shift_count)) # if show_prefs: # # prefs @@ -1884,40 +2197,44 @@ class RotaResults(object): # w.append("U") # timetable.append("".join(w)) - result_stream = StringIO() - self.results.write(ostream=result_stream) - self.results.write_json(ostream=result_stream) - result_string = result_stream.getvalue() + if self.rota.results is not None: + self.rota.results.write(ostream=result_stream) + self.rota.results.write_json(ostream=result_stream) + result_string = result_stream.getvalue() + else: + result_string = "Rota not run" - html = """ + joined_timetable = "\n".join(timetable) + + html = f""" -
- {}
+
+ {joined_timetable}

Rota settings

-        {}
+        {json.dumps(self.rota.constraint_options, indent=4)}
         

Shifts settings

-
- {} +
+ {"
".join(str(i) for i in self.rota.shifts)}

Output

-        {}
+        {result_string}
         
- """.format(table_name, "\n".join(timetable), json.dumps(self.rota.constraint_options, indent=4), "
".join(str(i) for i in self.rota.shifts), result_string) + """ if include_html_tag: html = """ @@ -1926,69 +2243,79 @@ class RotaResults(object): - {}""".format(html) + {}""".format( + html + ) return html def get_shift_summary(self): works = self.rota.model.works timetable = { - worker.get_details(): - {shift[0]: "" - for shift in self.rota.get_shift_names()} + worker.get_details(): { + shift[0]: "" for shift in self.rota.get_shift_names() + } for worker in self.rota.workers } - #timetable = { worker.get_details() : { shift : "" for shift in ["truro_twilight"] } for worker in workers } + # timetable = { worker.get_details() : { shift : "" for shift in ["truro_twilight"] } for worker in workers } t = [] for worker in self.rota.workers: l = [] total_shifts = 0 for shift in self.rota.get_shift_names(): - #for shift in ["truro_twilight"]: + # for shift in ["truro_twilight"]: c = [ works[worker.id, week, day, shift] - for week in self.rota.weeks for day in days + for week in self.rota.weeks + for day in days ].count(1) if c > 0: l.append("{} ({})".format(shift, c)) total_shifts = total_shifts + c - #print(worker.id, shift) + # print(worker.id, shift) timetable[worker.get_details()][shift[0]] = c - t.append("{} [{}]: {}".format(worker.get_full_details(), - total_shifts, ", ".join(l))) + t.append( + "{} [{}]: {}".format( + worker.get_full_details(), total_shifts, ", ".join(l) + ) + ) return "\n".join(t) def get_shift_summary_html(self): works = self.rota.model.works timetable = { - worker.get_details(): - {shift[0]: "" - for shift in self.rota.get_shift_names()} + worker.get_details(): { + shift[0]: "" for shift in self.rota.get_shift_names() + } for worker in self.rota.workers } - #timetable = { worker.get_details() : { shift : "" for shift in ["truro_twilight"] } for worker in workers } + # timetable = { worker.get_details() : { shift : "" for shift in ["truro_twilight"] } for worker in workers } t = [] for worker in self.rota.workers: l = [] total_shifts = 0 for shift in self.rota.get_shift_names(): - #for shift in ["truro_twilight"]: + # for shift in ["truro_twilight"]: c = [ works[worker.id, week, day, shift] - for week in self.rota.weeks for day in days + for week in self.rota.weeks + for day in days ].count(1) if c > 0: l.append("{} ({})".format(shift, c)) total_shifts = total_shifts + c - #print(worker.id, shift) + # print(worker.id, shift) timetable[worker.get_details()][shift[0]] = c - t.append("{} [{}]: {}".format(worker.get_full_details(), - total_shifts, ", ".join(l))) + t.append( + "{} [{}]: {}".format( + worker.get_full_details(), total_shifts, ", ".join(l) + ) + ) return "\n".join(t) - #def get_no_preference(no_pref): + # def get_no_preference(no_pref): # """Extract to a list the workers not satisfied with their weekend preference.""" # return [worker.id for worker in workers if no_pref[worker.id].value == 1] @@ -2015,13 +2342,14 @@ class RotaResults(object): block = shift.name for week in self.rota.weeks: print( - site, week, block, - self.rota.model.night_per_site[week, block, - site].value, - self.rota.model.night_per_site_t1[week, block, - site].value, - self.rota.model.night_per_site_t2[week, block, - site].value) + site, + week, + block, + self.rota.model.night_per_site[week, block, site].value, + self.rota.model.night_per_site_t1[week, block, site].value, + self.rota.model.night_per_site_t2[week, block, site].value, + ) + """ def get_night_details(self): for worker in self.rota.workers: @@ -2059,4 +2387,4 @@ class RotaResults(object): self.rota.model.weekend_shift_count_w[worker.id].value), ) - """ \ No newline at end of file + """ diff --git a/test.py b/test.py index 508bb1f..4358931 100644 --- a/test.py +++ b/test.py @@ -13,9 +13,9 @@ import os use_neos = False use_cplex = False -solve = True +solve = False -weeks_to_rota = 8 +weeks_to_rota = 26 time_to_run = 158500 # allow = 5000 @@ -28,7 +28,7 @@ suspend_on_finish = False sites = ("truro", "exeter", "torbay", "barnstaple", "plymouth", "proc", "truro no proc") Rota = RotaBuilder( - datetime.date(2021, 9, 6), + datetime.date(2022, 3, 7), # Rota = RotaBuilder(datetime.date(2021, 12, 6), # Rota = RotaBuilder(datetime.date(2021, 11, 8), weeks_to_rota=weeks_to_rota, @@ -222,25 +222,6 @@ if use_test_workers: for i in range(17, 19) ] ) - # Rota.add_workers([ - # Worker( - # Rota, - # i, - # "Exe {}".format(i), - # "exeter", - # 4, - # ) for i in range(20, 25) - # ]) - # Rota.add_workers([ - # Worker( - # Rota, - # i, - # "Torq {}".format(i), - # "torbay", - # 2, - # 50, - # ) for i in range(25, 29) - # ]) else: n = 0 for worker in workers: @@ -344,6 +325,8 @@ Rota.build_model() print(Rota.get_worker_details()) if not solve: + ResultsHolder = RotaResults(Rota) + ResultsHolder.export_rota_to_html() sys.exit(0) solver_options = { @@ -361,7 +344,7 @@ Rota.solve_model(options=solver_options) # result.Solver.Status = SolverStatus.warning # prob.solutions.load_from(result) -ResultsHolder = RotaResults(Rota, Rota.results) +ResultsHolder = RotaResults(Rota) worker_timetable_brief = ResultsHolder.get_worker_timetable_brief( show_prefs=False, show_unavailable=False diff --git a/timetable.js b/timetable.js index 020a91a..df1109b 100644 --- a/timetable.js +++ b/timetable.js @@ -54,8 +54,12 @@ function generateExtra() { whole_weekends_worked = 0; for (var i = 1; i <= weeks; i++) { - if ($(tr).find(`[data-week='${i}'][data-day='Sat']`).attr("data-shift") != "" || $(tr).find(`[data-week='${i}'][data-day='Sun']`).attr("data-shift") != "") { weekends_worked = weekends_worked + 1; } - if ($(tr).find(`[data-week='${i}'][data-day='Sat']`).attr("data-shift") != "" && $(tr).find(`[data-week='${i}'][data-day='Sun']`).attr("data-shift") != "") { whole_weekends_worked = whole_weekends_worked + 1; } + if ($(tr).find(`[data-week='${i}'][data-day='Sat']`).attr("data-shift") != "" || $(tr).find(`[data-week='${i}'][data-day='Sun']`).attr("data-shift") != "") { + weekends_worked = weekends_worked + 1; + } + if ($(tr).find(`[data-week='${i}'][data-day='Sat']`).attr("data-shift") != "" && $(tr).find(`[data-week='${i}'][data-day='Sun']`).attr("data-shift") != "") { + whole_weekends_worked = whole_weekends_worked + 1; + } } shift_counts = {}; @@ -133,73 +137,79 @@ function generateExtra() { bank_holidays = shift_tds.filter(".bank-holiday").filter(function (i) { return $(this).attr('data-shift') != ""; }); - console.log("BH", bank_holidays.length) + console.log("BH", bank_holidays.length) - bank_holidays_worked = bank_holidays.length; + bank_holidays_worked = bank_holidays.length; - worker_td.after(`
Total shifts: ${total_shifts}, Weekends: ${weekends_worked}, Bank holidays: ${bank_holidays_worked},
`) + worker_td.after(`
Total shifts: ${total_shifts}, Weekends: ${weekends_worked}, Bank holidays: ${bank_holidays_worked},
`) - }) + }) - sites = {}; - sites_days_lost = {} - for (const worker in workers) { - //console.log(worker, workers[worker]); - w = workers[worker]; - if (w.fte == 100) { - //console.log(w.shift_types); - for (let shift of w.shift_types) { - //console.log(shift); - if (!(w.site in sites)) { - sites[w.site] = {}; + sites = {}; + sites_days_lost = {} + for (const worker in workers) { + //console.log(worker, workers[worker]); + w = workers[worker]; + if (w.fte == 100) { + //console.log(w.shift_types); + for (let shift of w.shift_types) { + //console.log(shift); + if (!(w.site in sites)) { + sites[w.site] = {}; + } + if (!(shift in sites[w.site])) { + sites[w.site][shift] = [w.shift_counts[shift]]; + } else { + sites[w.site][shift].push(w.shift_counts[shift]); + } } - if (!(shift in sites[w.site])) { - sites[w.site][shift] = [w.shift_counts[shift]]; + if (!(w.site in sites_days_lost)) { + sites_days_lost[w.site] = [w.days_lost]; + } else { - sites[w.site][shift].push(w.shift_counts[shift]); + sites_days_lost[w.site].push(w.days_lost); } } - if (!(w.site in sites_days_lost)) { - sites_days_lost[w.site] = [w.days_lost]; - - } else { - sites_days_lost[w.site].push(w.days_lost); - } } - } - // Calculate site shift summaries - // $(table).append("
Average shifts for a 100% FTE trainee
"); + // Calculate site shift summaries + // $(table).append("
Average shifts for a 100% FTE trainee
"); - // for(const site in sites) { - // $(table).find(".site-summary").append(`
${site}
`); + // for(const site in sites) { + // $(table).find(".site-summary").append(`
${site}
`); - // for(const shift in sites[site]) { - // average = mean(sites[site][shift]) - // $(table).find(`.site-${site}`).append(`
${shift}: ${average.toFixed(2)}
`); - // } + // for(const shift in sites[site]) { + // average = mean(sites[site][shift]) + // $(table).find(`.site-${site}`).append(`
${shift}: ${average.toFixed(2)}
`); + // } + + // days_lost_avg = mean(sites_days_lost[site]); + // $(table).find(`.site-${site}`).append(`
Training days lost: ${days_lost_avg.toFixed(2)}
`); + // } + + summary_button = $("").click(() => { + $(table).find(".rota-day").toggleClass("hidden"); + $(table).find(".worker-summary").toggle(); + + }); + + + $(table).before(summary_button); - // days_lost_avg = mean(sites_days_lost[site]); - // $(table).find(`.site-${site}`).append(`
Training days lost: ${days_lost_avg.toFixed(2)}
`); - // } - summary_button = $("").click(() => { - $(table).find(".rota-day").toggleClass("hidden"); - $(table).find(".worker-summary").toggle(); }); - - - $(table).before(summary_button); - - - -}); -return global_shifts + return global_shifts } shifts = generateExtra(); +console.log(shifts) + +if (shifts.size < 1) { + shifts = $("#shifts-container").data("shifts"); +} +console.log(shifts) oshifts = Array.from(shifts).sort() diff --git a/workers.py b/workers.py index 4c91901..b99da94 100644 --- a/workers.py +++ b/workers.py @@ -1,7 +1,7 @@ import datetime from collections import defaultdict -#from shifts import RotaBuilder, days, sites +# from shifts import RotaBuilder, days, sites class Worker: @@ -19,9 +19,9 @@ class Worker: not_available_to_work=None, pref_not_to_work=None, work_requests=None, - proc_site="plymouth", + proc_site="plymouth", # We set a default proc_site previous_shifts={}, - pair=0 + pair=0, ): self.id = id self.name = name @@ -33,7 +33,7 @@ class Worker: self.nwd = nwd self.proportion_rota_to_work = 1 self.pair = pair - + self.proc_site = proc_site if proc_site == "plymouth" or proc_site == "": self.night_at_derriford = 1 @@ -49,8 +49,7 @@ class Worker: if end_date is None: self.end_date = None else: - self.end_date = datetime.datetime.strptime(end_date, - "%d/%m/%y").date() + self.end_date = datetime.datetime.strptime(end_date, "%d/%m/%y").date() if self.end_date > Rota.rota_end_date: self.end_date = Rota.rota_end_date @@ -58,21 +57,19 @@ class Worker: if self.end_date > Rota.start_date: days_to_work = (self.end_date - Rota.start_date).days - # add unavalabilities for weeks_days in Rota.weeks_days_product[days_to_work:]: week, day = weeks_days Rota.unavailable_to_work.add((self.id, week, day)) - Rota.unavailable_to_work_reason[(self.id, week, day)] = "END DATE" + Rota.unavailable_to_work_reason[ + (self.id, week, day) + ] = "END DATE" if oop is not None: start_oop, end_oop = oop - start_oop_date = datetime.datetime.strptime(start_oop, - "%d/%m/%y").date() - end_oop_date = datetime.datetime.strptime(end_oop, - "%d/%m/%y").date() + start_oop_date = datetime.datetime.strptime(start_oop, "%d/%m/%y").date() + end_oop_date = datetime.datetime.strptime(end_oop, "%d/%m/%y").date() - # ignore oops if they finish before the rota start date print(end_oop_date, Rota.start_date) if end_oop_date > Rota.start_date: @@ -85,62 +82,67 @@ class Worker: if start_oop_date < Rota.start_date: start_oop_date = Rota.start_date - oop_length = (end_oop_date - start_oop_date).days days_to_work = days_to_work - oop_length days_until_oop = (start_oop_date - Rota.start_date).days for weeks_days in Rota.weeks_days_product[ - days_until_oop:days_until_oop + oop_length]: + days_until_oop : days_until_oop + oop_length + ]: week, day = weeks_days Rota.unavailable_to_work.add((self.id, week, day)) - Rota.unavailable_to_work_reason[(self.id, week, day)] = "OOP ()".format(oop) + Rota.unavailable_to_work_reason[ + (self.id, week, day) + ] = "OOP ()".format(oop) if pref_not_to_work is not None: # loop throught dates converting to week / day combination for date in pref_not_to_work: days_from_start = ( - datetime.datetime.strptime(date, "%d/%m/%y").date() - - Rota.start_date).days + datetime.datetime.strptime(date, "%d/%m/%y").date() + - Rota.start_date + ).days week = days_from_start // 7 + 1 day = Rota.days[(days_from_start % 7)] # Weight the value to take into account the number of preferences # 1 is added to the total number of requests to ensure they do not outweight # a single (or fewer) request(s) - Rota.pref_not_to_work[(self.id, week, - day)] = 1 / (len(pref_not_to_work) + 1) + Rota.pref_not_to_work[(self.id, week, day)] = 1 / ( + len(pref_not_to_work) + 1 + ) if not_available_to_work is not None: - #print(not_available_to_work) + # print(not_available_to_work) # loop throught dates converting to week / day combination for date, reason in not_available_to_work: days_from_start = ( - datetime.datetime.strptime(date, "%d/%m/%y").date() - - Rota.start_date).days + datetime.datetime.strptime(date, "%d/%m/%y").date() + - Rota.start_date + ).days week = days_from_start // 7 + 1 day = Rota.days[(days_from_start % 7)] Rota.unavailable_to_work.add((self.id, week, day)) Rota.unavailable_to_work_reason[(self.id, week, day)] = reason - if work_requests is not None: for date, shift in work_requests: days_from_start = ( - datetime.datetime.strptime(date, "%d/%m/%y").date() - - Rota.start_date).days + datetime.datetime.strptime(date, "%d/%m/%y").date() + - Rota.start_date + ).days week = days_from_start // 7 + 1 day = Rota.days[(days_from_start % 7)] Rota.work_requests.add((self.id, week, day, shift)) - print(days_to_work, Rota.rota_days_length) + # Calculate the proportion of the rota that is being worked self.proportion_rota_to_work = days_to_work / Rota.rota_days_length - # We had to adjust the full time equivalent for people who CCT / leave the rota early + # We have to adjust the full time equivalent for people who CCT / leave the rota early self.fte_adj = self.fte * self.proportion_rota_to_work if self.fte_adj > 100: - raise ValueError("{} : fte_ajd = {}".format(self.name, self.fte_adj)) + raise ValueError("{} : fte_ajd = {}".format(self.name, self.fte_adj)) # print(self.name, self.nwd) @@ -151,11 +153,17 @@ class Worker: other.fte_adj, other.name, ) - + def __str__(self): - + nwd = ", ".join([str(i) for i in self.nwd]) if self.nwd is not None else "" - return "{} {} [{}] PROC SITE:{} ({})".format(self.name, (self.site, self.grade, self.fte_adj), nwd, self.proc_site, self.night_at_derriford) + return "{} {} [{}] PROC SITE:{} ({})".format( + self.name, + (self.site, self.grade, self.fte_adj), + nwd, + self.proc_site, + self.night_at_derriford, + ) def get_details(self): return "{} {} {}".format(self.id, self.site[0], self.grade)