The Coverage Schedule

Stats

Non-holiday coverage (current yr):
Holiday coverage (current yr):
Non-holiday coverage (cumulative):
Holiday coverage (cumulative):
placeholder

Please explain ...

As you know, the Earth revolves around its axis an average of once every 24 hours with respect to the Sun (a solar day). And the Earth revolves around the Sun once every 365.24217 solar days (mean solar year). This ignores such things as precession, nutation, tidal interaction and other nerdy shit you forgot about after you passed your pre-med Physics final. Back in the Good Old Days, it was probably enough to know where you were in the year by observing the solstices and moon phases. But as time went on, a need for more precision arose - a calendar. It's a little trickier than it seems, because a solar year is not an exact number of solar days. So a calendar year is only an approximation of a solar year, and needs to be resynchronized with the solar year at regular intervals. This eventually led to the Gregorian calendar we use today, which resynchronizes by way of catch-up leap days. It was adopted in 1582, because the Julian calendar used before that kept moving Easter back, and the Christians were no longer certain of the precise day they should persecute Jews for killing Jesus.

The Gregorian calendar is a cycle of 400 years with 97 leap years, for a total of 146097 days, since 146097/400 = 365.2425, close to the length of the mean solar year (off by 28 or 29 seconds). Coincidentally, 7 is a divisor of 146097, so that the day of the week of any day in the cycle is the same on that date 400 years earlier or later. Therefore, there are 14 types of annual calendars – one beginning on each day of the week for leap years and one beginning on each day of the week for each non-leap year. If you don’t cross a century mark, these annual calendars have their own 28 year cycle.

What does this have to do with coverage?

Under the current coverage schema for holidays vs. nonholidays, a calendar type can have between 38 and 41 non-holiday coverage periods and 15 or 16 holiday coverage periods, for a total of 53, 54, 55 or 57 coverage periods in a year. The difference from calendar type to calendar type is due to (1) whether holidays with a fixed date (e.g. July 4) occur on Tuesday/Wednesday/Thursday, where they are treated as distinct coverage periods, or otherwise, where they are treated as part of an existing weekend, 3 day or otherwise, and (2) whether or not there is a weekend between Christmas and New Years, which is treated as a holiday coverage period in the years in which it occurs.

So what?

Up until not too long ago and during most of the 30 years where I have been in this group, coverage was by free rotation. Only weekends (not weekday holidays) were included and if you got more holidays in a year than someone else, you didn’t get your panties in a twist. When a weekday holiday came along and you wanted time off, you called one of your coverage mates or even one of the doctors who lived in the hospital anyways (this was prior to the Hospitalist Cartel). It seemed to work just fine. However, due to incessant whining and bitching on the part of certain individuals, we were forced to come up with a scheme that guaranteed that no one got more of a certain holiday than someone else (coverage equity)

How do we fix it?

If we accept the dubious assertion that holiday coverage periods occur at some sort of premium that needs to be equally distributed, we need to create an algorithm that makes that happen. Most of the problems with achieving equity stem from a basic concept of number theory. Sorry, but that wasn't a required pre-med course. Specifically, the number of covering docs, i, needs to be an generator of the additive group of integers modulo n, aka (ℤ/nℤ)+, where n in the number of coverage periods in question. This only occurs when i and n are relatively prime. That is, gcd(i, n) = 1. Otherwise, the cycle of integers repeats without generating every integer {0, 1, 2, ... n-1} (i.e., every doc in the coverage group) in ℤ/nℤ. What happens when we apply that to various schedule generating algorithms?

Traditional Good Old Fashioned Free Rotation Coverage

This takes up about 5 minutes to create a new annual schedule. But nooo ...... Recall that a coverage year can have between 53, 54, 55 or 57 coverage periods. Whenever the number of covering docs is a divisor of the number of annual coverage periods, the next year will start off identically coverage-wise. And if the holiday spacing is the same as the number of docs, the same doc can get back-to-back holidays, which surely would precipitate certain individuals to decompensate. You can run the Free Rotation Simulation to see how this works. Actually, if you run the simulation out for 100 years with 7 docs, you'll find that the difference between the least and most amount of holidays is about 17%.

Hybrid Model

Since what some people seem to care about most is holidays, what if we give holidays their own rotation? That is, uncouple holiday and non-holiday rotation. Well, this works fine for 7 docs and 15 or 16 holiday coverage periods, since 7 is relatively prime to both 15 and 16. But the integers {3, 4, 5, 6, 8, 9, 10, 11, 12} all have a gcd > 1 with one or more of one or more of {53, 54, 55, 57}, so one coverage doc can repeat a holiday before another one gets it. However, everyone's tally for total holidays covered is equal. Run the Uncoupled Simulation to see how that works.

Annual Holiday Resynchronization

This comes closest to what we are trying to achieve, but it is not perfect. Rotate the first holiday of the year (New Years) through each doc, so everybody gets the same holiday schedule. Almost. Why almost? Because there is that pesky weekend between Christmas and New Years in some years. 12 of them in a 28 year calendar cycle, to be exact. Since 7 is not a divisor of 12, some people are going to get more of them than others. At the end of 100 years the difference between the least and most amount of end-of-year weekends is 8. Wah.

Historical Holiday Coverage
*NYMLKPresPre+PatSpr+MemIndLabColVetThkTh+ChrCh+
2003xxDE????????MK??????JKDE??MK??
2004DE??DE??????MK????MKJKDE??JK
2005DE??JK??????????DE??MKKFDEJK
2006DEMMMKMMJKPCKFDEIBMKPCDEMKJK
2007DEDEMKMMJKMMKFJKVJDEDEVJMKMMMK
2008VJMKMKMMJKJKDEVJKFMKJKNMKFJKJK
2009DEJKKFJKJKNMVJJKDENMMKVJDEMK
2010KFVJMKNMKFMKVJKFDENMJKKFDEJK
2011MKLMKFMKNMSGDEKFSGMKVJNMLMJK
2012VJDEVJKFLMNMMKVJKFDEMKLMDEJKSH
2013DELMNMVJKFMKJKDELMNMVJKFMKJKDE
2014LMNMVJKFMKJKDELMNMVJKFMKJKDELM
2015NMVJKGMKJKDELMNMVJKFKGJKDELM
2016VJKFMKJKDEKGLMNMVJKFMKJKDEKG
2017KFMKJKDEKGLMNMVJKFMKJKDEKGLM
2018MKJKKGLMNMVJKFMKJKKGLMNMVJKFMK
2019LMNMVJKFMKJKMMKGLMNMVJKFMKJKMM
2020KGLMNMVJKFMKJKKGLMNMVJKFMKJK
2021LMNMVJKFMKJKKGLMNMVJKFMKJKKG