Kapacitetsberegning
Sådan beregner Ressourcify arbejdsdage, nettotimer og udnyttelse — med konkrete eksempler.
Alle kapacitetstal i Ressourcify er bygget af fire grundlæggende felter. Her kommer formlerne, et regneeksempel og de vigtigste fælder.
De fire grundfelter
| Felt | Forklaring |
|---|---|
workdays | Antal arbejdsdage i måneden — ekskl. weekender og helligdage |
baseHours | Forventede timer i måneden ud fra brugerens WorkingPattern |
leaveHours | Sum af fraværstimer i måneden |
netHours | baseHours − leaveHours |
Formlerne
Alle resultater afrundes til én decimal for at undgå float-støj.
Udnyttelse
Hvis netHours = 0 (ren fraværsmåned) returneres 0% — ikke NaN.
Du kan vælge useNetCapacity = false for at regne mod brutto i stedet —
relevant for "potentiel udnyttelse"-rapporter.
Regneeksempel: Alice, maj 2026
Forudsætninger:
- Arbejdsmønster: dansk standard (37 t/uge fordelt 7,4 t × 5 dage)
employmentPct = 1.00- 1.-2. maj er weekend; 8. maj er helligdag (Store Bededag flyttet — fiktivt eksempel)
- Alice har ferie 11.-15. maj (hele dage)
| Trin | Tal |
|---|---|
| Dage i maj | 31 |
| − weekender | −10 |
| − helligdage | −1 |
workdays | 20 |
baseHours (20 × 7,4) | 148,0 |
| Feriedage (11.-15. maj, alle hverdage) | 5 |
leaveHours (5 × 7,4) | 37,0 |
netHours | 111,0 |
Hvis Alice er allokeret 80 timer i maj:
Arbejdsmønster (WorkingPattern)
Hver bruger har et mønster med en time-værdi per ugedag (ISO 1=mandag … 7=søndag). Standard er 7,4 t mandag–fredag og 0 t weekend.
| Eksempel | Mandag | Tirsdag | Onsdag | Torsdag | Fredag | Lør | Søn |
|---|---|---|---|---|---|---|---|
| Fuldtid | 7,4 | 7,4 | 7,4 | 7,4 | 7,4 | 0 | 0 |
| Halvtid | 3,7 | 3,7 | 3,7 | 3,7 | 3,7 | 0 | 0 |
| 4-dages uge | 9,25 | 9,25 | 9,25 | 9,25 | 0 | 0 | 0 |
Mønsteret kan ændres over tid — hver pattern-række har en validFrom-dato.
Fravær: hele eller delvise dage
Et Leave har en valgfri hoursPerDay:
hoursPerDay | Tolkning |
|---|---|
null (default) | Hele dagen — bruger arbejdsmønsterets timer for ugedagen |
4.0 | Halv dag — uanset mønster |
Fravær på en weekend eller helligdag bidrager ikke til leaveHours,
fordi det ikke er en arbejdsdag. Brugeren behøver ikke registrere det.
Bruger-start og -slut
Hvis User.startDate er midt i måneden, tæller kun dage fra og med
start. Tilsvarende for User.endDate. Det forhindrer urealistisk høj
kapacitet for ny-startede eller fratrådte.
Hvor logikken bor
Al beregning ligger i lib/calc/capacity.ts som rene funktioner — uden
DB-kald. Det gør den nem at unit-teste og forhindrer at logikken spreder
sig ud i routes og komponenter.
Resultatet caches i tabellerne MonthlyCapacity og MonthlyUtilization,
så lister og rapporter kan læse dem hurtigt uden at genberegne.
Genberegning
Cachen invalideres når:
- En allokering oprettes, ændres eller slettes
- Et fravær oprettes, ændres eller slettes
- Brugerens
WorkingPatternændres - En helligdag tilføjes eller fjernes
- En manuel Genberegn-knap aktiveres af en admin
Genberegningen kører månedvis og er idempotent.