{
  "dataset": {
    "name": "Shift rotation patterns",
    "version": "1.0.0",
    "updated": "2026-08-03",
    "license": "https://creativecommons.org/licenses/by/4.0/",
    "attribution": "BlueShifts Police Calendar — www.policecalendarapp.com",
    "sourceUrl": "https://www.policecalendarapp.com/rotating-shifts/data/",
    "notes": "Cycles are the common form of each pattern. Agencies run local variations, and a collective agreement or bid always governs the real schedule. Weekend and turnaround figures are computed from the cycle, not surveyed.",
    "fieldNotes": {
      "cycle": "One entry per day of the cycle: day, night, twentyFourHour or off.",
      "cycleCompact": "The same sequence as a string: d, n, h, o.",
      "locksToWeekdays": "True when the cycle length divides by seven. Those patterns never drift, so the crew you are on decides which weekends you get.",
      "fullWeekendsOffPerYear": "Weekends where BOTH Saturday and Sunday are off, across 52 weeks, computed from every starting position in the cycle.",
      "tightestTurnaround": "The change of shift type with the least time off around it, or null where every change has a proper break."
    }
  },
  "rotations": [
    {
      "id": "24-48-and-48-96-schedule",
      "name": "24/48 and 48/96 schedules",
      "alsoKnownAs": "ABC shift, ABC Kelly, modified 24/48",
      "url": "https://www.policecalendarapp.com/rotating-shifts/24-48-and-48-96-schedule/",
      "cycleDays": 6,
      "cycle": [
        "twentyFourHour",
        "off",
        "off",
        "twentyFourHour",
        "off",
        "off"
      ],
      "cycleCompact": "hoohoo",
      "daysOnPerCycle": 2,
      "daysOffPerCycle": 4,
      "shiftLength": "24 or 48 hours",
      "averageWeekHours": "56 hours",
      "rotatesTours": null,
      "locksToWeekdays": false,
      "fullWeekendsOffPerYear": {
        "min": 17,
        "max": 18,
        "variesByCrew": true
      },
      "blocks": [
        {
          "kind": "twentyFourHour",
          "days": 1
        },
        {
          "kind": "off",
          "days": 2
        },
        {
          "kind": "twentyFourHour",
          "days": 1
        },
        {
          "kind": "off",
          "days": 2
        }
      ],
      "tightestTurnaround": null
    },
    {
      "id": "24-72-schedule",
      "name": "24/72 schedule",
      "alsoKnownAs": null,
      "url": "https://www.policecalendarapp.com/rotating-shifts/24-72-schedule/",
      "cycleDays": 4,
      "cycle": [
        "twentyFourHour",
        "off",
        "off",
        "off"
      ],
      "cycleCompact": "hooo",
      "daysOnPerCycle": 1,
      "daysOffPerCycle": 3,
      "shiftLength": "24 hours",
      "averageWeekHours": "42 hours",
      "rotatesTours": null,
      "locksToWeekdays": false,
      "fullWeekendsOffPerYear": {
        "min": 26,
        "max": 26,
        "variesByCrew": false
      },
      "blocks": [
        {
          "kind": "twentyFourHour",
          "days": 1
        },
        {
          "kind": "off",
          "days": 3
        }
      ],
      "tightestTurnaround": null
    },
    {
      "id": "3-4-4-3-schedule",
      "name": "3-4 4-3 schedule",
      "alsoKnownAs": null,
      "url": "https://www.policecalendarapp.com/rotating-shifts/3-4-4-3-schedule/",
      "cycleDays": 14,
      "cycle": [
        "day",
        "day",
        "day",
        "off",
        "off",
        "off",
        "off",
        "day",
        "day",
        "day",
        "day",
        "off",
        "off",
        "off"
      ],
      "cycleCompact": "dddooooddddooo",
      "daysOnPerCycle": 7,
      "daysOffPerCycle": 7,
      "shiftLength": "12 hours",
      "averageWeekHours": "42 hours",
      "rotatesTours": null,
      "locksToWeekdays": true,
      "fullWeekendsOffPerYear": {
        "min": 0,
        "max": 52,
        "variesByCrew": true
      },
      "blocks": [
        {
          "kind": "day",
          "days": 3
        },
        {
          "kind": "off",
          "days": 4
        },
        {
          "kind": "day",
          "days": 4
        },
        {
          "kind": "off",
          "days": 3
        }
      ],
      "tightestTurnaround": null
    },
    {
      "id": "3-on-3-off-schedule",
      "name": "3 on 3 off schedule",
      "alsoKnownAs": null,
      "url": "https://www.policecalendarapp.com/rotating-shifts/3-on-3-off-schedule/",
      "cycleDays": 12,
      "cycle": [
        "day",
        "day",
        "day",
        "off",
        "off",
        "off",
        "night",
        "night",
        "night",
        "off",
        "off",
        "off"
      ],
      "cycleCompact": "dddooonnnooo",
      "daysOnPerCycle": 6,
      "daysOffPerCycle": 6,
      "shiftLength": "12 hours",
      "averageWeekHours": "42 hours",
      "rotatesTours": null,
      "locksToWeekdays": false,
      "fullWeekendsOffPerYear": {
        "min": 16,
        "max": 18,
        "variesByCrew": true
      },
      "blocks": [
        {
          "kind": "day",
          "days": 3
        },
        {
          "kind": "off",
          "days": 3
        },
        {
          "kind": "night",
          "days": 3
        },
        {
          "kind": "off",
          "days": 3
        }
      ],
      "tightestTurnaround": null
    },
    {
      "id": "4-10-schedule",
      "name": "4/10 schedule",
      "alsoKnownAs": "four tens, 4x10, 4-3 schedule, 4 on 3 off, 4-3 4-3 days and nights",
      "url": "https://www.policecalendarapp.com/rotating-shifts/4-10-schedule/",
      "cycleDays": 7,
      "cycle": [
        "day",
        "day",
        "day",
        "day",
        "off",
        "off",
        "off"
      ],
      "cycleCompact": "ddddooo",
      "daysOnPerCycle": 4,
      "daysOffPerCycle": 3,
      "shiftLength": "10 hours",
      "averageWeekHours": "40 hours",
      "rotatesTours": null,
      "locksToWeekdays": true,
      "fullWeekendsOffPerYear": {
        "min": 0,
        "max": 52,
        "variesByCrew": true
      },
      "blocks": [
        {
          "kind": "day",
          "days": 4
        },
        {
          "kind": "off",
          "days": 3
        }
      ],
      "tightestTurnaround": null
    },
    {
      "id": "4-on-2-off-schedule",
      "name": "4 on 2 off schedule",
      "alsoKnownAs": "4-2 schedule",
      "url": "https://www.policecalendarapp.com/rotating-shifts/4-on-2-off-schedule/",
      "cycleDays": 12,
      "cycle": [
        "day",
        "day",
        "day",
        "day",
        "off",
        "off",
        "night",
        "night",
        "night",
        "night",
        "off",
        "off"
      ],
      "cycleCompact": "ddddoonnnnoo",
      "daysOnPerCycle": 8,
      "daysOffPerCycle": 4,
      "shiftLength": "8 hours",
      "averageWeekHours": "37.3 hours",
      "rotatesTours": null,
      "locksToWeekdays": false,
      "fullWeekendsOffPerYear": {
        "min": 8,
        "max": 9,
        "variesByCrew": true
      },
      "blocks": [
        {
          "kind": "day",
          "days": 4
        },
        {
          "kind": "off",
          "days": 2
        },
        {
          "kind": "night",
          "days": 4
        },
        {
          "kind": "off",
          "days": 2
        }
      ],
      "tightestTurnaround": null
    },
    {
      "id": "4-on-4-off-schedule",
      "name": "4 on 4 off schedule",
      "alsoKnownAs": "4D4O4N4O, 4 days 4 off 4 nights 4 off, Continental 12-hour (4-crew)",
      "url": "https://www.policecalendarapp.com/rotating-shifts/4-on-4-off-schedule/",
      "cycleDays": 16,
      "cycle": [
        "day",
        "day",
        "day",
        "day",
        "off",
        "off",
        "off",
        "off",
        "night",
        "night",
        "night",
        "night",
        "off",
        "off",
        "off",
        "off"
      ],
      "cycleCompact": "ddddoooonnnnoooo",
      "daysOnPerCycle": 8,
      "daysOffPerCycle": 8,
      "shiftLength": "12 hours",
      "averageWeekHours": "42 hours",
      "rotatesTours": null,
      "locksToWeekdays": false,
      "fullWeekendsOffPerYear": {
        "min": 18,
        "max": 21,
        "variesByCrew": true
      },
      "blocks": [
        {
          "kind": "day",
          "days": 4
        },
        {
          "kind": "off",
          "days": 4
        },
        {
          "kind": "night",
          "days": 4
        },
        {
          "kind": "off",
          "days": 4
        }
      ],
      "tightestTurnaround": null
    },
    {
      "id": "5-5-2-2-schedule",
      "name": "5-5 2-2 schedule",
      "alsoKnownAs": "2-2 5-5, 2 on 2 off 5 on 5 off",
      "url": "https://www.policecalendarapp.com/rotating-shifts/5-5-2-2-schedule/",
      "cycleDays": 14,
      "cycle": [
        "day",
        "day",
        "day",
        "day",
        "day",
        "off",
        "off",
        "off",
        "off",
        "off",
        "day",
        "day",
        "off",
        "off"
      ],
      "cycleCompact": "dddddoooooddoo",
      "daysOnPerCycle": 7,
      "daysOffPerCycle": 7,
      "shiftLength": "11 hours",
      "averageWeekHours": "38.5 hours",
      "rotatesTours": null,
      "locksToWeekdays": true,
      "fullWeekendsOffPerYear": {
        "min": 0,
        "max": 52,
        "variesByCrew": true
      },
      "blocks": [
        {
          "kind": "day",
          "days": 5
        },
        {
          "kind": "off",
          "days": 5
        },
        {
          "kind": "day",
          "days": 2
        },
        {
          "kind": "off",
          "days": 2
        }
      ],
      "tightestTurnaround": null
    },
    {
      "id": "5-2-5-3-schedule",
      "name": "5-2 5-3 schedule",
      "alsoKnownAs": "5-2 5-2 5-3, 5 on 2 off 5 on 3 off",
      "url": "https://www.policecalendarapp.com/rotating-shifts/5-2-5-3-schedule/",
      "cycleDays": 15,
      "cycle": [
        "day",
        "day",
        "day",
        "day",
        "day",
        "off",
        "off",
        "day",
        "day",
        "day",
        "day",
        "day",
        "off",
        "off",
        "off"
      ],
      "cycleCompact": "dddddoodddddooo",
      "daysOnPerCycle": 10,
      "daysOffPerCycle": 5,
      "shiftLength": "8 hours",
      "averageWeekHours": "37.3 hours",
      "rotatesTours": null,
      "locksToWeekdays": false,
      "fullWeekendsOffPerYear": {
        "min": 9,
        "max": 12,
        "variesByCrew": true
      },
      "blocks": [
        {
          "kind": "day",
          "days": 5
        },
        {
          "kind": "off",
          "days": 2
        },
        {
          "kind": "day",
          "days": 5
        },
        {
          "kind": "off",
          "days": 3
        }
      ],
      "tightestTurnaround": null
    },
    {
      "id": "5-2-fixed-schedule",
      "name": "5 on 2 off schedule",
      "alsoKnownAs": "5-2 schedule, permanent days",
      "url": "https://www.policecalendarapp.com/rotating-shifts/5-2-fixed-schedule/",
      "cycleDays": 7,
      "cycle": [
        "off",
        "day",
        "day",
        "day",
        "day",
        "day",
        "off"
      ],
      "cycleCompact": "odddddo",
      "daysOnPerCycle": 5,
      "daysOffPerCycle": 2,
      "shiftLength": "8 hours",
      "averageWeekHours": "40 hours",
      "rotatesTours": "None",
      "locksToWeekdays": true,
      "fullWeekendsOffPerYear": {
        "min": 0,
        "max": 52,
        "variesByCrew": true
      },
      "blocks": [
        {
          "kind": "day",
          "days": 5
        },
        {
          "kind": "off",
          "days": 2
        }
      ],
      "tightestTurnaround": null
    },
    {
      "id": "5-on-3-off-schedule",
      "name": "5 on 3 off schedule",
      "alsoKnownAs": null,
      "url": "https://www.policecalendarapp.com/rotating-shifts/5-on-3-off-schedule/",
      "cycleDays": 16,
      "cycle": [
        "day",
        "day",
        "day",
        "day",
        "day",
        "off",
        "off",
        "off",
        "night",
        "night",
        "night",
        "night",
        "night",
        "off",
        "off",
        "off"
      ],
      "cycleCompact": "dddddooonnnnnooo",
      "daysOnPerCycle": 10,
      "daysOffPerCycle": 6,
      "shiftLength": "8 hours",
      "averageWeekHours": "35 hours",
      "rotatesTours": null,
      "locksToWeekdays": false,
      "fullWeekendsOffPerYear": {
        "min": 12,
        "max": 14,
        "variesByCrew": true
      },
      "blocks": [
        {
          "kind": "day",
          "days": 5
        },
        {
          "kind": "off",
          "days": 3
        },
        {
          "kind": "night",
          "days": 5
        },
        {
          "kind": "off",
          "days": 3
        }
      ],
      "tightestTurnaround": null
    },
    {
      "id": "6-on-2-off-schedule",
      "name": "6 on 2 off schedule",
      "alsoKnownAs": "6-2 schedule",
      "url": "https://www.policecalendarapp.com/rotating-shifts/6-on-2-off-schedule/",
      "cycleDays": 16,
      "cycle": [
        "day",
        "day",
        "day",
        "day",
        "day",
        "day",
        "off",
        "off",
        "night",
        "night",
        "night",
        "night",
        "night",
        "night",
        "off",
        "off"
      ],
      "cycleCompact": "ddddddoonnnnnnoo",
      "daysOnPerCycle": 12,
      "daysOffPerCycle": 4,
      "shiftLength": "8 hours",
      "averageWeekHours": "42 hours",
      "rotatesTours": null,
      "locksToWeekdays": false,
      "fullWeekendsOffPerYear": {
        "min": 6,
        "max": 7,
        "variesByCrew": true
      },
      "blocks": [
        {
          "kind": "day",
          "days": 6
        },
        {
          "kind": "off",
          "days": 2
        },
        {
          "kind": "night",
          "days": 6
        },
        {
          "kind": "off",
          "days": 2
        }
      ],
      "tightestTurnaround": null
    },
    {
      "id": "6-on-3-off-schedule",
      "name": "6 on 3 off schedule",
      "alsoKnownAs": "6-3 schedule",
      "url": "https://www.policecalendarapp.com/rotating-shifts/6-on-3-off-schedule/",
      "cycleDays": 18,
      "cycle": [
        "day",
        "day",
        "day",
        "day",
        "day",
        "day",
        "off",
        "off",
        "off",
        "night",
        "night",
        "night",
        "night",
        "night",
        "night",
        "off",
        "off",
        "off"
      ],
      "cycleCompact": "ddddddooonnnnnnooo",
      "daysOnPerCycle": 12,
      "daysOffPerCycle": 6,
      "shiftLength": "8 hours",
      "averageWeekHours": "37.3 hours",
      "rotatesTours": null,
      "locksToWeekdays": false,
      "fullWeekendsOffPerYear": {
        "min": 11,
        "max": 12,
        "variesByCrew": true
      },
      "blocks": [
        {
          "kind": "day",
          "days": 6
        },
        {
          "kind": "off",
          "days": 3
        },
        {
          "kind": "night",
          "days": 6
        },
        {
          "kind": "off",
          "days": 3
        }
      ],
      "tightestTurnaround": null
    },
    {
      "id": "7-on-7-off-schedule",
      "name": "7 on 7 off schedule",
      "alsoKnownAs": "week-on week-off, 7/7 rotation",
      "url": "https://www.policecalendarapp.com/rotating-shifts/7-on-7-off-schedule/",
      "cycleDays": 14,
      "cycle": [
        "day",
        "day",
        "day",
        "day",
        "day",
        "day",
        "day",
        "off",
        "off",
        "off",
        "off",
        "off",
        "off",
        "off"
      ],
      "cycleCompact": "dddddddooooooo",
      "daysOnPerCycle": 7,
      "daysOffPerCycle": 7,
      "shiftLength": "12 hours",
      "averageWeekHours": "42 hours",
      "rotatesTours": null,
      "locksToWeekdays": true,
      "fullWeekendsOffPerYear": {
        "min": 0,
        "max": 26,
        "variesByCrew": true
      },
      "blocks": [
        {
          "kind": "day",
          "days": 7
        },
        {
          "kind": "off",
          "days": 7
        }
      ],
      "tightestTurnaround": null
    },
    {
      "id": "9-80-schedule",
      "name": "9/80 schedule",
      "alsoKnownAs": "5-2 4-3, 5/4-9 plan, nine-day fortnight",
      "url": "https://www.policecalendarapp.com/rotating-shifts/9-80-schedule/",
      "cycleDays": 14,
      "cycle": [
        "off",
        "day",
        "day",
        "day",
        "day",
        "day",
        "off",
        "off",
        "day",
        "day",
        "day",
        "day",
        "off",
        "off"
      ],
      "cycleCompact": "odddddooddddoo",
      "daysOnPerCycle": 9,
      "daysOffPerCycle": 5,
      "shiftLength": "9 hours",
      "averageWeekHours": "40 hours",
      "rotatesTours": null,
      "locksToWeekdays": true,
      "fullWeekendsOffPerYear": {
        "min": 0,
        "max": 52,
        "variesByCrew": true
      },
      "blocks": [
        {
          "kind": "day",
          "days": 5
        },
        {
          "kind": "off",
          "days": 2
        },
        {
          "kind": "day",
          "days": 4
        },
        {
          "kind": "off",
          "days": 3
        }
      ],
      "tightestTurnaround": null
    },
    {
      "id": "california-swing-schedule",
      "name": "California Swing",
      "alsoKnownAs": null,
      "url": "https://www.policecalendarapp.com/rotating-shifts/california-swing-schedule/",
      "cycleDays": 9,
      "cycle": [
        "twentyFourHour",
        "off",
        "off",
        "off",
        "twentyFourHour",
        "twentyFourHour",
        "off",
        "off",
        "off"
      ],
      "cycleCompact": "hooohhooo",
      "daysOnPerCycle": 3,
      "daysOffPerCycle": 6,
      "shiftLength": "24 hours",
      "averageWeekHours": "56 hours",
      "rotatesTours": null,
      "locksToWeekdays": false,
      "fullWeekendsOffPerYear": {
        "min": 23,
        "max": 24,
        "variesByCrew": true
      },
      "blocks": [
        {
          "kind": "twentyFourHour",
          "days": 1
        },
        {
          "kind": "off",
          "days": 3
        },
        {
          "kind": "twentyFourHour",
          "days": 2
        },
        {
          "kind": "off",
          "days": 3
        }
      ],
      "tightestTurnaround": null
    },
    {
      "id": "continental-schedule",
      "name": "Continental schedule",
      "alsoKnownAs": null,
      "url": "https://www.policecalendarapp.com/rotating-shifts/continental-schedule/",
      "cycleDays": 28,
      "cycle": [
        "day",
        "day",
        "day",
        "day",
        "night",
        "night",
        "night",
        "off",
        "off",
        "day",
        "day",
        "day",
        "day",
        "day",
        "night",
        "night",
        "off",
        "off",
        "day",
        "day",
        "day",
        "day",
        "day",
        "night",
        "night",
        "off",
        "off",
        "off"
      ],
      "cycleCompact": "ddddnnnoodddddnnoodddddnnooo",
      "daysOnPerCycle": 21,
      "daysOffPerCycle": 7,
      "shiftLength": "8 hours",
      "averageWeekHours": "42 hours",
      "rotatesTours": null,
      "locksToWeekdays": true,
      "fullWeekendsOffPerYear": {
        "min": 0,
        "max": 13,
        "variesByCrew": true
      },
      "blocks": [
        {
          "kind": "day",
          "days": 4
        },
        {
          "kind": "night",
          "days": 3
        },
        {
          "kind": "off",
          "days": 2
        },
        {
          "kind": "day",
          "days": 5
        },
        {
          "kind": "night",
          "days": 2
        },
        {
          "kind": "off",
          "days": 2
        },
        {
          "kind": "day",
          "days": 5
        },
        {
          "kind": "night",
          "days": 2
        },
        {
          "kind": "off",
          "days": 3
        }
      ],
      "tightestTurnaround": {
        "from": "day",
        "to": "night",
        "daysOffBetween": 0
      }
    },
    {
      "id": "dupont-schedule",
      "name": "DuPont schedule",
      "alsoKnownAs": null,
      "url": "https://www.policecalendarapp.com/rotating-shifts/dupont-schedule/",
      "cycleDays": 28,
      "cycle": [
        "night",
        "night",
        "night",
        "night",
        "off",
        "off",
        "off",
        "day",
        "day",
        "day",
        "off",
        "night",
        "night",
        "night",
        "off",
        "off",
        "off",
        "day",
        "day",
        "day",
        "day",
        "off",
        "off",
        "off",
        "off",
        "off",
        "off",
        "off"
      ],
      "cycleCompact": "nnnnooodddonnnoooddddooooooo",
      "daysOnPerCycle": 14,
      "daysOffPerCycle": 14,
      "shiftLength": "12 hours",
      "averageWeekHours": "42 hours",
      "rotatesTours": null,
      "locksToWeekdays": true,
      "fullWeekendsOffPerYear": {
        "min": 0,
        "max": 26,
        "variesByCrew": true
      },
      "blocks": [
        {
          "kind": "night",
          "days": 4
        },
        {
          "kind": "off",
          "days": 3
        },
        {
          "kind": "day",
          "days": 3
        },
        {
          "kind": "off",
          "days": 1
        },
        {
          "kind": "night",
          "days": 3
        },
        {
          "kind": "off",
          "days": 3
        },
        {
          "kind": "day",
          "days": 4
        },
        {
          "kind": "off",
          "days": 7
        }
      ],
      "tightestTurnaround": {
        "from": "day",
        "to": "night",
        "daysOffBetween": 1
      }
    },
    {
      "id": "kelly-schedule",
      "name": "Kelly schedule",
      "alsoKnownAs": null,
      "url": "https://www.policecalendarapp.com/rotating-shifts/kelly-schedule/",
      "cycleDays": 9,
      "cycle": [
        "twentyFourHour",
        "off",
        "twentyFourHour",
        "off",
        "twentyFourHour",
        "off",
        "off",
        "off",
        "off"
      ],
      "cycleCompact": "hohohoooo",
      "daysOnPerCycle": 3,
      "daysOffPerCycle": 6,
      "shiftLength": "24 hours",
      "averageWeekHours": "56 hours",
      "rotatesTours": null,
      "locksToWeekdays": false,
      "fullWeekendsOffPerYear": {
        "min": 16,
        "max": 18,
        "variesByCrew": true
      },
      "blocks": [
        {
          "kind": "twentyFourHour",
          "days": 1
        },
        {
          "kind": "off",
          "days": 1
        },
        {
          "kind": "twentyFourHour",
          "days": 1
        },
        {
          "kind": "off",
          "days": 1
        },
        {
          "kind": "twentyFourHour",
          "days": 1
        },
        {
          "kind": "off",
          "days": 4
        }
      ],
      "tightestTurnaround": null
    },
    {
      "id": "panama-schedule",
      "name": "Panama schedule",
      "alsoKnownAs": "2-2-3, 2-3-2, 2-2-3-2-2-3, fixed Panama, rotating Panama",
      "url": "https://www.policecalendarapp.com/rotating-shifts/panama-schedule/",
      "cycleDays": 14,
      "cycle": [
        "day",
        "day",
        "off",
        "off",
        "day",
        "day",
        "day",
        "off",
        "off",
        "day",
        "day",
        "off",
        "off",
        "off"
      ],
      "cycleCompact": "ddoodddooddooo",
      "daysOnPerCycle": 7,
      "daysOffPerCycle": 7,
      "shiftLength": "12 hours",
      "averageWeekHours": "42 hours",
      "rotatesTours": null,
      "locksToWeekdays": true,
      "fullWeekendsOffPerYear": {
        "min": 0,
        "max": 26,
        "variesByCrew": true
      },
      "blocks": [
        {
          "kind": "day",
          "days": 2
        },
        {
          "kind": "off",
          "days": 2
        },
        {
          "kind": "day",
          "days": 3
        },
        {
          "kind": "off",
          "days": 2
        },
        {
          "kind": "day",
          "days": 2
        },
        {
          "kind": "off",
          "days": 3
        }
      ],
      "tightestTurnaround": null
    },
    {
      "id": "pitman-schedule",
      "name": "Pitman schedule",
      "alsoKnownAs": "2-2-3 12-hour, Pitman fixed, Pitman rotating, Pitman days, Pitman nights",
      "url": "https://www.policecalendarapp.com/rotating-shifts/pitman-schedule/",
      "cycleDays": 14,
      "cycle": [
        "night",
        "night",
        "off",
        "off",
        "night",
        "night",
        "night",
        "off",
        "off",
        "night",
        "night",
        "off",
        "off",
        "off"
      ],
      "cycleCompact": "nnoonnnoonnooo",
      "daysOnPerCycle": 7,
      "daysOffPerCycle": 7,
      "shiftLength": "12 hours",
      "averageWeekHours": "42 hours",
      "rotatesTours": null,
      "locksToWeekdays": true,
      "fullWeekendsOffPerYear": {
        "min": 0,
        "max": 26,
        "variesByCrew": true
      },
      "blocks": [
        {
          "kind": "night",
          "days": 2
        },
        {
          "kind": "off",
          "days": 2
        },
        {
          "kind": "night",
          "days": 3
        },
        {
          "kind": "off",
          "days": 2
        },
        {
          "kind": "night",
          "days": 2
        },
        {
          "kind": "off",
          "days": 3
        }
      ],
      "tightestTurnaround": null
    },
    {
      "id": "southern-swing-schedule",
      "name": "Southern Swing schedule",
      "alsoKnownAs": null,
      "url": "https://www.policecalendarapp.com/rotating-shifts/southern-swing-schedule/",
      "cycleDays": 28,
      "cycle": [
        "day",
        "day",
        "day",
        "day",
        "day",
        "day",
        "day",
        "off",
        "off",
        "day",
        "day",
        "day",
        "day",
        "day",
        "day",
        "day",
        "off",
        "off",
        "night",
        "night",
        "night",
        "night",
        "night",
        "night",
        "night",
        "off",
        "off",
        "off"
      ],
      "cycleCompact": "dddddddoodddddddoonnnnnnnooo",
      "daysOnPerCycle": 21,
      "daysOffPerCycle": 7,
      "shiftLength": "8 hours",
      "averageWeekHours": "42 hours",
      "rotatesTours": null,
      "locksToWeekdays": true,
      "fullWeekendsOffPerYear": {
        "min": 0,
        "max": 13,
        "variesByCrew": true
      },
      "blocks": [
        {
          "kind": "day",
          "days": 7
        },
        {
          "kind": "off",
          "days": 2
        },
        {
          "kind": "day",
          "days": 7
        },
        {
          "kind": "off",
          "days": 2
        },
        {
          "kind": "night",
          "days": 7
        },
        {
          "kind": "off",
          "days": 3
        }
      ],
      "tightestTurnaround": null
    },
    {
      "id": "3-12-schedule",
      "name": "3/12 schedule",
      "alsoKnownAs": "3 on 4 off, three twelves, 3x12",
      "url": "https://www.policecalendarapp.com/rotating-shifts/3-12-schedule/",
      "cycleDays": 7,
      "cycle": [
        "day",
        "day",
        "day",
        "off",
        "off",
        "off",
        "off"
      ],
      "cycleCompact": "dddoooo",
      "daysOnPerCycle": 3,
      "daysOffPerCycle": 4,
      "shiftLength": "12 hours",
      "averageWeekHours": "36 hours",
      "rotatesTours": null,
      "locksToWeekdays": true,
      "fullWeekendsOffPerYear": {
        "min": 0,
        "max": 52,
        "variesByCrew": true
      },
      "blocks": [
        {
          "kind": "day",
          "days": 3
        },
        {
          "kind": "off",
          "days": 4
        }
      ],
      "tightestTurnaround": null
    },
    {
      "id": "2-on-2-off-schedule",
      "name": "2 on 2 off schedule",
      "alsoKnownAs": "2-2 rotation",
      "url": "https://www.policecalendarapp.com/rotating-shifts/2-on-2-off-schedule/",
      "cycleDays": 4,
      "cycle": [
        "day",
        "day",
        "off",
        "off"
      ],
      "cycleCompact": "ddoo",
      "daysOnPerCycle": 2,
      "daysOffPerCycle": 2,
      "shiftLength": "12 hours",
      "averageWeekHours": "42 hours",
      "rotatesTours": null,
      "locksToWeekdays": false,
      "fullWeekendsOffPerYear": {
        "min": 13,
        "max": 13,
        "variesByCrew": false
      },
      "blocks": [
        {
          "kind": "day",
          "days": 2
        },
        {
          "kind": "off",
          "days": 2
        }
      ],
      "tightestTurnaround": null
    },
    {
      "id": "5-on-4-off-schedule",
      "name": "5 on 4 off schedule",
      "alsoKnownAs": "5-4 rotation",
      "url": "https://www.policecalendarapp.com/rotating-shifts/5-on-4-off-schedule/",
      "cycleDays": 9,
      "cycle": [
        "day",
        "day",
        "day",
        "day",
        "day",
        "off",
        "off",
        "off",
        "off"
      ],
      "cycleCompact": "dddddoooo",
      "daysOnPerCycle": 5,
      "daysOffPerCycle": 4,
      "shiftLength": "10 hours",
      "averageWeekHours": "About 42 hours",
      "rotatesTours": null,
      "locksToWeekdays": false,
      "fullWeekendsOffPerYear": {
        "min": 16,
        "max": 18,
        "variesByCrew": true
      },
      "blocks": [
        {
          "kind": "day",
          "days": 5
        },
        {
          "kind": "off",
          "days": 4
        }
      ],
      "tightestTurnaround": null
    },
    {
      "id": "8-on-6-off-schedule",
      "name": "8 on 6 off schedule",
      "alsoKnownAs": "8-6 rotation",
      "url": "https://www.policecalendarapp.com/rotating-shifts/8-on-6-off-schedule/",
      "cycleDays": 14,
      "cycle": [
        "day",
        "day",
        "day",
        "day",
        "day",
        "day",
        "day",
        "day",
        "off",
        "off",
        "off",
        "off",
        "off",
        "off"
      ],
      "cycleCompact": "ddddddddoooooo",
      "daysOnPerCycle": 8,
      "daysOffPerCycle": 6,
      "shiftLength": "10 hours",
      "averageWeekHours": "40 hours",
      "rotatesTours": null,
      "locksToWeekdays": true,
      "fullWeekendsOffPerYear": {
        "min": 0,
        "max": 26,
        "variesByCrew": true
      },
      "blocks": [
        {
          "kind": "day",
          "days": 8
        },
        {
          "kind": "off",
          "days": 6
        }
      ],
      "tightestTurnaround": null
    },
    {
      "id": "ddnnoo-schedule",
      "name": "DDNNOO schedule",
      "alsoKnownAs": "2-2-2 days and nights",
      "url": "https://www.policecalendarapp.com/rotating-shifts/ddnnoo-schedule/",
      "cycleDays": 6,
      "cycle": [
        "day",
        "day",
        "night",
        "night",
        "off",
        "off"
      ],
      "cycleCompact": "ddnnoo",
      "daysOnPerCycle": 4,
      "daysOffPerCycle": 2,
      "shiftLength": "12 hours",
      "averageWeekHours": "56 hours",
      "rotatesTours": null,
      "locksToWeekdays": false,
      "fullWeekendsOffPerYear": {
        "min": 8,
        "max": 9,
        "variesByCrew": true
      },
      "blocks": [
        {
          "kind": "day",
          "days": 2
        },
        {
          "kind": "night",
          "days": 2
        },
        {
          "kind": "off",
          "days": 2
        }
      ],
      "tightestTurnaround": {
        "from": "day",
        "to": "night",
        "daysOffBetween": 0
      }
    },
    {
      "id": "fast-12-schedule",
      "name": "Fast 12 schedule",
      "alsoKnownAs": "DDNNOOOO, 2-2-2 4-off, 2 days 2 nights 4 off, DDNN 4 off, 2D2N4O, 12-hour Continental",
      "url": "https://www.policecalendarapp.com/rotating-shifts/fast-12-schedule/",
      "cycleDays": 8,
      "cycle": [
        "day",
        "day",
        "night",
        "night",
        "off",
        "off",
        "off",
        "off"
      ],
      "cycleCompact": "ddnnoooo",
      "daysOnPerCycle": 4,
      "daysOffPerCycle": 4,
      "shiftLength": "12 hours",
      "averageWeekHours": "42 hours",
      "rotatesTours": null,
      "locksToWeekdays": false,
      "fullWeekendsOffPerYear": {
        "min": 18,
        "max": 21,
        "variesByCrew": true
      },
      "blocks": [
        {
          "kind": "day",
          "days": 2
        },
        {
          "kind": "night",
          "days": 2
        },
        {
          "kind": "off",
          "days": 4
        }
      ],
      "tightestTurnaround": {
        "from": "day",
        "to": "night",
        "daysOffBetween": 0
      }
    },
    {
      "id": "24-48-24-96-schedule",
      "name": "24/48/24/96 schedule",
      "alsoKnownAs": "24-48-24-96, modified Kelly, 24/24/96, two tours in eight days",
      "url": "https://www.policecalendarapp.com/rotating-shifts/24-48-24-96-schedule/",
      "cycleDays": 8,
      "cycle": [
        "twentyFourHour",
        "off",
        "off",
        "twentyFourHour",
        "off",
        "off",
        "off",
        "off"
      ],
      "cycleCompact": "hoohoooo",
      "daysOnPerCycle": 2,
      "daysOffPerCycle": 6,
      "shiftLength": "24 hours",
      "averageWeekHours": "42 hours",
      "rotatesTours": null,
      "locksToWeekdays": false,
      "fullWeekendsOffPerYear": {
        "min": 25,
        "max": 27,
        "variesByCrew": true
      },
      "blocks": [
        {
          "kind": "twentyFourHour",
          "days": 1
        },
        {
          "kind": "off",
          "days": 2
        },
        {
          "kind": "twentyFourHour",
          "days": 1
        },
        {
          "kind": "off",
          "days": 4
        }
      ],
      "tightestTurnaround": null
    }
  ]
}
