{
  "schemaVersion": 1,
  "analysis": {
    "startDate": "2026-08-15",
    "endDate": "2026-12-31",
    "periodLabel": "15. august–31. desember 2026"
  },
  "plans": [
    {
      "id": "weekday-17-18-august",
      "label": "Hverdag 17.–18. aug.",
      "category": "weekday",
      "weekdays": [
        0,
        1,
        2,
        3,
        4
      ],
      "validFrom": "2026-08-15",
      "validTo": "2026-08-18",
      "priority": 10,
      "validity": "17.–18. august 2026",
      "includeInLongPieces": false,
      "longPieceLabel": "Hverdag",
      "downloadTitle": "Tjenesteplan · hverdager 17.–18. august",
      "downloadDescription": "Tidligere hverdagsplan som brukes 17. og 18. august 2026.",
      "file": "tjenesteplan-hverdager-17-18-august-2026.xlsx",
      "href": "/downloads/tjenesteplan-hverdager-17-18-august-2026.xlsx",
      "sizeBytes": 42688
    },
    {
      "id": "weekday-from-19-august",
      "label": "Hverdag fra 19. aug.",
      "category": "weekday",
      "weekdays": [
        0,
        1,
        2,
        3,
        4
      ],
      "validFrom": "2026-08-19",
      "validTo": "2026-12-31",
      "priority": 10,
      "validity": "Hverdager fra 19. august 2026",
      "includeInLongPieces": true,
      "longPieceLabel": "Hverdag",
      "downloadTitle": "Tjenesteplan · hverdager fra 19. august",
      "downloadDescription": "Ny hverdagsplan som brukes fra og med onsdag 19. august 2026.",
      "comparison": {
        "name": "Ny hverdagsplan",
        "previousPlanId": "weekday-17-18-august",
        "effectiveDate": "2026-08-19",
        "validity": "Fra og med 19. august"
      },
      "file": "tjenesteplan-hverdager-fra-19-august-2026.xlsx",
      "href": "/downloads/tjenesteplan-hverdager-fra-19-august-2026.xlsx",
      "sizeBytes": 42749
    },
    {
      "id": "saturday-default",
      "label": "Lørdag",
      "category": "saturday",
      "weekdays": [
        5
      ],
      "validFrom": "2026-08-15",
      "validTo": "2026-12-31",
      "priority": 10,
      "validity": "Lørdager fra 15. august, unntatt 5. september",
      "includeInLongPieces": true,
      "longPieceLabel": "Lørdag",
      "downloadTitle": "Tjenesteplan · lørdager",
      "downloadDescription": "Ordinær høstplan for alle lørdager fra 15. august 2026, unntatt registrerte unntaksdager.",
      "file": "tjenesteplan-lordager-host-2026.xlsx",
      "href": "/downloads/tjenesteplan-lordager-host-2026.xlsx",
      "sizeBytes": 37581
    },
    {
      "id": "saturday-5-september",
      "label": "Lørdag 5. sep.",
      "category": "saturday",
      "weekdays": [
        5
      ],
      "validFrom": "2026-09-05",
      "validTo": "2026-09-05",
      "exactDates": [
        "2026-09-05"
      ],
      "priority": 100,
      "validity": "Bare 5. september 2026",
      "includeInLongPieces": true,
      "longPieceLabel": "Lørdag 5. sep.",
      "downloadTitle": "Tjenesteplan · lørdag 5. september",
      "downloadDescription": "Markedsdagsplan som bare er gyldig lørdag 5. september 2026.",
      "comparison": {
        "name": "Markedsdag 5. september",
        "previousPlanId": "saturday-default",
        "effectiveDate": "2026-09-05",
        "validity": "Bare 5. september"
      },
      "file": "tjenesteplan-lordag-5-september-2026.xlsx",
      "href": "/downloads/tjenesteplan-lordag-5-september-2026.xlsx",
      "sizeBytes": 33758
    },
    {
      "id": "sunday-default",
      "label": "Søndag",
      "category": "sunday",
      "weekdays": [
        6
      ],
      "validFrom": "2026-08-16",
      "validTo": "2026-12-31",
      "priority": 10,
      "validity": "Søndager fra 16. august 2026",
      "includeInLongPieces": true,
      "longPieceLabel": "Søndag",
      "downloadTitle": "Tjenesteplan · søndager",
      "downloadDescription": "Høstplan for søndager, gyldig fra 16. august 2026.",
      "file": "tjenesteplan-sondager-host-2026.xlsx",
      "href": "/downloads/tjenesteplan-sondager-host-2026.xlsx",
      "sizeBytes": 29900
    }
  ],
  "rankingPlan": {
    "id": "ranking-2026",
    "label": "Rangeringsplan",
    "validity": "Rotasjon brukt 15. august–31. desember 2026",
    "downloadTitle": "Rangeringsplan 2026",
    "downloadDescription": "Vaktrekkefølge fordelt på gruppe og posisjon.",
    "file": "rangeringsplan-2026.xlsx",
    "href": "/downloads/rangeringsplan-2026.xlsx",
    "sizeBytes": 406291
  },
  "rules": {
    "mealBreakMinimumMinutes": 30,
    "mealBreakSelection": "longestQualifyingGap",
    "travelTimeBetweenDifferentPlaceFamilies": true,
    "travelTimeMaximumMinutesExclusive": 30,
    "dailyRestMinimumMinutes": 660,
    "dailyRestMarginMinutes": 720,
    "weeklyRestMinimumHours": 35,
    "absoluteLongPieceLimits": {
      "weekdayAtOrBefore20Minutes": 275,
      "weekdayAfter20Minutes": 295,
      "saturdaySundayHolidayMinutes": 295,
      "weekdayCutoffMinutes": 1200
    },
    "excludedLongPieceGroups": [
      "G1",
      "E1"
    ],
    "excludedActivityTerms": [
      "pk",
      "sikv",
      "oppsett"
    ],
    "placeEquivalences": {
      "G/Gf": [
        "G",
        "Gf.1",
        "Gf.2",
        "Gf.3",
        "Gf.4"
      ],
      "Ht/Hv": [
        "Ht.1",
        "Ht.2",
        "Hv"
      ],
      "D": [
        "D",
        "D.1",
        "D.2"
      ]
    }
  },
  "rotationExceptions": {
    "substitutions": [
      {
        "group": "E4",
        "whenCode": "1",
        "weekdays": [
          0,
          1,
          2,
          3,
          4
        ],
        "sourceGroup": "E6",
        "sourceCodeByWeekday": {
          "0": "1",
          "1": "2",
          "2": "3",
          "3": "4",
          "4": "5"
        },
        "description": "E4 bruker de angitte kveldsvaktene fra E6."
      },
      {
        "group": "G7",
        "whenCode": "1",
        "weekdays": [
          0,
          1,
          2,
          3,
          4
        ],
        "sourceGroup": "G17",
        "sourceCodeByWeekday": {
          "0": "1",
          "1": "2",
          "2": "3",
          "3": "4",
          "4": "5"
        },
        "description": "G7 bruker de angitte kveldsvaktene fra G17."
      }
    ],
    "dutyVariantSelection": {
      "6002": "latestStart",
      "6003": "earliestEnd"
    },
    "missingWeekendDutyMeansFree": true,
    "descriptions": [
      "E4 bruker de angitte kveldsvaktene fra E6.",
      "G7 bruker de angitte kveldsvaktene fra G17.",
      "For G1-varianter brukes kombinasjonen som gir lengst mulig hvile ved 35-timerskontrollen.",
      "Manglende tjenestenummer i helgeplanen behandles som fridag."
    ]
  }
}
