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 ModuleGuard på system-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.
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-gridmed kolonnene Navn, Beskrivelse, Startdato, Sluttdato, Uker, Aktiv og en handlingskolonne — shift-plan.component.ts:170-241. - Aktiv-kolonnen viser en
badge-soft-success(Ja) ellerbadge-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.
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 oppDayFullName.0…6i i18n. - Uke, Starttid, Slutttid.
- Arbeidsdag, Helg, Lunsjtrekk — vises som disablede avkrysninger.
- Normal lønnsart og Overtidslønnsart — formatert via
bindNormalWageType()ogbindWageType().
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å.
Slik gjør du¶
Opprett en ny skiftplan¶
- Åpne Innstillinger → Systeminnstillinger og velg fanen Skiftplan.
- Klikk Legg til skiftplan.
- Fyll inn Navn (obligatorisk) og evt. Beskrivelse.
- Velg én eller flere Ansattgrupper — startdato- og sluttdato-feltene blir synlige først når minst én gruppe er valgt.
- Sett Startdato, Sluttdato og evt. Uker (1–53) for rotasjonen.
- Kryss av Aktiv hvis planen skal være i bruk umiddelbart.
- Velg eventuelt en Arbeidstidsbestemmelse og TimeScheduler-standardene (Avdeling/Prosjekt/Arbeidsordre).
- Klikk Lagre. Skjemaet lukkes når lagringen lykkes.
Legg til regler på en lagret skiftplan¶
- Åpne planen igjen fra listen (regel-tabellen vises kun for skiftplaner som er lagret).
- Klikk Skiftplanregel for å åpne regelpanelet.
- Velg én eller flere Ukedag-verdier, sett Uke, Starttid og Slutttid.
- Velg Dag-type (Arbeidsdag / Helg / Ferie).
- Sett opp Lunsjtrekk og overtid-relaterte felter etter behov.
- Eventuelt overstyr Normal lønnsart, Avdeling, Prosjekt eller Arbeidsordre for denne regelen.
- Klikk Lagre — regelen legges til lokalt og persisteres når du lagrer hele skiftplanen.
Slett en skiftplan¶
- Klikk søppelbøtte-ikonet på radens handlingskolonne.
- I bekreftelsesdialogen vises:
- hva som slettes (tilknytninger mellom skiftplan og ansatte, alle regler, selve planen),
- en advarsel om at handlingen ikke kan angres.
- Kryss av Jeg forstår at dette ikke kan angres for å aktivere knappen.
- Klikk Slett skiftplan.
Sletteflyten kjører via SettingService.deleteShiftPlan(id) og er bygget i shift-plan.component.ts:890-937.
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 DateRangeValidator på shiftPlanForm (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¶
- Arbeidstidsreguleringer — bestemmelser som kan kobles til en skiftplan via feltet «Arbeidstidsbestemmelser».
- Vaktplan — hvor selve vaktene plasseres på ansatte.
- Arbeidstider — normaltid for ikke-skiftarbeid.
- Kalender — helligdager som regelen kan flagges mot via dag-typen «Ferie».
- Innstillinger — oversikt



