Gå til innhold

Skiftplan

Skiftplan-fanen i Systeminnstillinger er en CRUD-liste over skiftplaner for tenanten. Hver skiftplan består av et navn, en gyldighetsperiode, valgfri tilknytning til ansattgrupper og et sett regler per ukedag som definerer arbeidstid, lunsj og lønnsarter. Skiftplaner brukes av timeplanlegger (TimeScheduler) for å foreslå normal- og overtidstimer.

Siden er ikke en hovedbryter for skiftarbeid og inneholder ingen kataloger av "skifttyper" (Dag/Kveld/Natt) eller rotasjonsmønstre — alt slikt uttrykkes som regler per ukedag og uke innenfor en konkret skiftplan-rad.

Tilgang

Hvem Hva trengs
Rolle Administrator (adminPage: true på ruten)
Modul Innstillinger (moduleId: 99) — registrert via ModuleGuardsystem-setting-ruten i setting-routing.module.ts:33

Fanen lastes som ShiftPlanComponent når brukeren velger ?tab=shiftPlan i Systeminnstillinger — se system-setting.component.ts:73.

tabellen med skiftplaner og knappen "Legg til skiftplan" øverst

Slik ser siden ut

  • Øverst: knappen Legg til skiftplan (btn btn-primary btn-sm) som åpner et høyre-sidepanel for ny plan — shift-plan.component.html:6-13.
  • Under: en konti-smart-grid med kolonnene Navn, Beskrivelse, Startdato, Sluttdato, Uker, Aktiv og en handlingskolonne — shift-plan.component.ts:170-241.
  • Aktiv-kolonnen viser en badge-soft-success (Ja) eller badge-soft-secondary (Nei) basert på isActive-flagget på den enkelte raden — det er altså ingen sentral av/på-bryter.
  • Handlingskolonnen har Rediger (åpner samme sidepanel for valgt rad) og Slett (åpner bekreftelsesmodal).

Feltene på en skiftplan

Skjemaet er bygget i shift-plan.component.ts:76-97 og rendres i sidepanelet #shiftPlanPanel (shift-plan.component.html:55-347).

Felt Type Validering / standard Notat
Navn Tekst Validators.required Vises i listen og brukes som identifikator i sletting og logger.
Beskrivelse Tekst Fritekst.
Ansattgrupper Multi-select (ng-select med bindValue="id") Henter timeGroups fra getShiftPlans-responsen Når listen er tom, vises ikke startdato/sluttdato-feltene (*ngIf="f.groupIds.value != ''").
Startdato Datepicker (ngb-datepicker-i18n) Validators.required + DateValidator + DateRangeValidator mot sluttdato Synlig kun når minst én gruppe er valgt.
Sluttdato Datepicker Validators.required + DateValidator + DateRangeValidator Må være lik eller etter startdato — feilmelding: ShiftPlan.endTimeValidation ("Sluttdatoen må være etter startdatoen.").
Uker Tall Validators.min(1), Validators.max(53) Antall uker i rotasjonen — brukes sammen med week på hver regel.
Aktiv Avkrysning Standard false Styrer kun denne raden, ikke modulen som helhet.
Arbeidstidsbestemmelser ng-select over regulations fra SettingService.getActiveRegulations() Valgfri Knytter skiftplanen til en eksisterende arbeidstidsregulering (se egen håndboksside).

Standardverdier for TimeScheduler (samme skjema, nederst)

Disse feltene brukes av timeplanleggeren som fallback når regelen ikke har egne verdier — overskrift: ShiftPlan.timeSchedulerDefaults ("Automatisk timeføring - standardverdier"), helpetekst: ShiftPlan.fallbackValuesHelp ("Disse verdiene brukes kun hvis ikke angitt på regel-nivå eller bruker-nivå").

Felt Type Hentes fra
Avdeling ng-select SettingService.getDepartments()
Prosjekt ng-select SettingService.getProjects()
Arbeidsordre ng-select med debounced server-søk (min. 2 tegn) TimeService.getWorkOrders(term)

Verdiene serialiseres som strenger via extractNo() ved lagring — se shift-plan.component.ts:1076-1085.

åpent sidepanel for redigering av skiftplan med alle hovedfeltene + TimeScheduler-seksjon

Regler per ukedag

Når en skiftplan er lagret, viser hovedpanelet en regeltabell nederst (*ngIf="shiftPlanDetails") med knappen Skiftplanregel for å legge til en ny regel. Hver regel er ett tidsvindu for én eller flere ukedager.

Kolonner i regeltabellen (shift-plan.component.ts:243-340):

  • Ukedag (multi-verdi) — render via getDayOfWeekName() som slår opp DayFullName.0…6 i i18n.
  • Uke, Starttid, Slutttid.
  • Arbeidsdag, Helg, Lunsjtrekk — vises som disablede avkrysninger.
  • Normal lønnsart og Overtidslønnsart — formatert via bindNormalWageType() og bindWageType().

Felter på en regel

Regelskjemaet er bygget i shift-plan.component.ts:101-117 og rendres i sidepanelet #rulePanel.

Felt Type Validering / standard Notat
Ukedag Multi-select 0–6 Validators.required Etiketter fra DayFullName.{0..6}.
Uke Tall Validators.min(1), Validators.max(53) Brukes ved rotasjon over flere uker.
Starttid app-time-input Validators.required Lagres som HH:mm:ss.
Slutttid app-time-input Validators.required Kan være lavere enn starttid — overnight-skift håndteres uten egen validering (se shift-plan.component.ts:562-564).
Dag-type Radioknapper: Arbeidsdag / Helg / Ferie Standard WorkDay Setter isWorkDay, isWeekend eller isHoliday på regelen.
Lunsjtrekk Avkrysning Standard false Aktiverer feltene under.
Ant. timer før lunsjtrekk Tall ≥ 0 Standard 0
Lunsjtrekk (eks. 0.5t) Tall ≥ 0 Standard 0 Antall timer som trekkes når terskel er nådd.
Overtid terskelminutter Tall Antall minutter før overtidssatsen kicker inn.
Overtidslønnsart Multi-select fra wageTypes Tagger flere overtids-lønnsarter til regelen.

regularHoursBeforeOvertime finnes i skjemaet men er skjult i UI (style="display: none;") — shift-plan.component.html:469.

Regelspesifikke verdier (overstyrer skiftplanen)

Nederst i regelskjemaet ligger seksjonen ShiftPlan.ruleSpecificValues ("Regelspesifikke verdier") med hjelpeteksten "Hvis satt, overstyrer disse verdiene skiftplanens standardverdier ved bruk av timeplanleggeren":

  • Normal lønnsart (normalWageTypeNo)
  • Avdeling (departmentNo)
  • Prosjekt (projectNo)
  • Arbeidsordre (workOrderNo)

Alle plukkes fra samme oppslagslister som på hovedplan-nivå.

åpent sidepanel "Ny skiftplanregel" med dag-type-radio, tid-felter og overstyringsseksjonen synlig

Slik gjør du

Opprett en ny skiftplan

  1. Åpne Innstillinger → Systeminnstillinger og velg fanen Skiftplan.
  2. Klikk Legg til skiftplan.
  3. Fyll inn Navn (obligatorisk) og evt. Beskrivelse.
  4. Velg én eller flere Ansattgrupper — startdato- og sluttdato-feltene blir synlige først når minst én gruppe er valgt.
  5. Sett Startdato, Sluttdato og evt. Uker (1–53) for rotasjonen.
  6. Kryss av Aktiv hvis planen skal være i bruk umiddelbart.
  7. Velg eventuelt en Arbeidstidsbestemmelse og TimeScheduler-standardene (Avdeling/Prosjekt/Arbeidsordre).
  8. Klikk Lagre. Skjemaet lukkes når lagringen lykkes.

Legg til regler på en lagret skiftplan

  1. Åpne planen igjen fra listen (regel-tabellen vises kun for skiftplaner som er lagret).
  2. Klikk Skiftplanregel for å åpne regelpanelet.
  3. Velg én eller flere Ukedag-verdier, sett Uke, Starttid og Slutttid.
  4. Velg Dag-type (Arbeidsdag / Helg / Ferie).
  5. Sett opp Lunsjtrekk og overtid-relaterte felter etter behov.
  6. Eventuelt overstyr Normal lønnsart, Avdeling, Prosjekt eller Arbeidsordre for denne regelen.
  7. Klikk Lagre — regelen legges til lokalt og persisteres når du lagrer hele skiftplanen.

Slett en skiftplan

  1. Klikk søppelbøtte-ikonet på radens handlingskolonne.
  2. I bekreftelsesdialogen vises:
  3. hva som slettes (tilknytninger mellom skiftplan og ansatte, alle regler, selve planen),
  4. en advarsel om at handlingen ikke kan angres.
  5. Kryss av Jeg forstår at dette ikke kan angres for å aktivere knappen.
  6. Klikk Slett skiftplan.

Sletteflyten kjører via SettingService.deleteShiftPlan(id) og er bygget i shift-plan.component.ts:890-937.

NgbModal med rød header, listen over hva som fjernes og avkrysningen "Jeg forstår..."

Vanlige problemer

Startdato/Sluttdato vises ikke i skjemaet

Begge feltene er gjemt bak *ngIf="f.groupIds.value != ''". Velg minst én ansattgruppe under Ansattgrupper først — da rendres datepickerne.

"Sluttdatoen må være etter startdatoen"

Meldingen kommer fra DateRangeValidatorshiftPlanForm (ShiftPlan.endTimeValidation). Sjekk at sluttdatoen er minst lik startdatoen.

"Skriv inn uker mellom 1 og 53" / "Skriv inn uke mellom 1 og 53"

weeks-feltet på skiftplanen og week-feltet på regelen har begge Validators.min(1) og Validators.max(53) — bruk et heltall i dette intervallet.

Knappen "Lagre" på sidepanelet er deaktivert

Knappen har [disabled]="!shiftPlanForm.valid" (eller !shiftPlanRuleForm.valid på regelpanelet). Sjekk at alle obligatoriske felter (Navn, Startdato, Sluttdato, og på regelnivå Ukedag/Starttid/Slutttid) er fylt ut og at dato-validatorene ikke flagger feil.

Skiftet krysser midnatt

Det er ingen validering som krever at slutttid er etter starttid på en regel — kommentar i koden bekrefter at overnight-skift (f.eks. 20:00–08:00) er bevisst tillatt. Bare definer regelen som vanlig.

Listen over arbeidsordrer kommer ikke fram

Arbeidsordre-feltet er et server-søk med [minTermLength]="2" og 300 ms debounce. Skriv minst to tegn i feltet før resultater hentes via TimeService.getWorkOrders().

Relaterte sider