# 🏖️ Guide: Feriegodkendelse i Keybalance BS## Hvad er feriegodkendelse?Når en godkender er fraværende (ferie, sygdom, andet), skal systemet
automatisk finde en anden person der kan godkende bilag i deres sted.
Dette håndteres af **BS_Bilag_GodkAflosBestem**-tasken, som gennemgår
en prioriteret kæde af mulige afløsere.
---
## 📋 ForudsætningerFør feriegodkendelse kan fungere, skal følgende være sat op:
### 1. Ferieafløser-tabel (`BS_Bilag_GodkAflos`)Hver godkender kan have én eller flere afløsere registreret med:
| Felt | Beskrivelse |
|------|-------------|
| `Godkender` | Den fraværende godkenders initialer |
| `NyGodkender` | Afløserens initialer |
| `NyGodkenderArt` | Type af afløser (0 = normal medarbejder) |
| `StartDato` | Første dag afløsningen gælder |
| `SlutDato` | Sidste dag afløsningen gælder |
| `Tekst` | Beskrivelse / note om afløsningen |
### 2. Medarbejder-tabel (`Medarbejder`)Hver medarbejder kan have en **baggodkender** sat op via feltet:
| Felt | Beskrivelse |
|------|-------------|
| `GodkendAf` | Initialer på den der normalt godkender denne persons bilag |
---
## 🔄 Sådan fungerer kæden trin for trinSystemet forsøger at finde en gyldig godkender i følgende prioriterede
rækkefølge. Så snart en gyldig godkender findes, stoppes søgningen.
---
### Trin 1 — Hent den registrerede ferieafløserSystemet slår op i `BS_Bilag_GodkAflos` og finder den afløser
(`NyGodkender`) der er registreret for den fraværende godkender.
Godkender (fraværende) → NyGodkender (afløser fra tabel)
**Regler:**
- Afløseren skal have en gyldig post i tabellen
- `StartDato` skal være ≤ dags dato
- `SlutDato` skal være ≥ dags dato
---
### Trin 2 — Tjek om afløseren selv er fraværende (`TjekNyGodk`)
Inden afløseren accepteres, tjekkes det om **afløseren selv** har en
aktiv ferieregistrering i `BS_Bilag_GodkAflos`.
NyGodkender → har de selv en aktiv ferie-post? → JA: nulstil afløser
**Regler:**
- Hvis afløseren også er fraværende i dag → afløseren afvises (`$NyGodk = ""`)
- Teksten opdateres med en note om at afløseren selv er fraværende
---
### Trin 3 — Tjek om afløseren allerede har godkendt (`TjekAnsvar`)
Systemet tjekker i `BS_Bilag_Godkend` om den fundne afløser allerede
har godkendt det pågældende bilag.
NyGodkender → har de allerede godkendt dette bilag? → JA: nulstil afløser
**Regler:**
- Status skal være `Godkendt`, `SysGodkendt` eller `DelGodkendt`
- `GodkendtDato` skal være udfyldt
- Hvis ja → afløseren afvises (`$NyGodk = ""`)
---
### Trin 4 — Forsøg med afløserens baggodkender (1. niveau)
Hvis afløseren fra trin 1-3 ikke kunne bruges, forsøger systemet at
finde **afløserens egen baggodkender** via `Medarbejder.GodkendAf`.
NyGodkender (afvist) → Medarbejder.GodkendAf → ny kandidat
**Regler:**
- Slår op på den *originale* godkenders (`BSGODAF.Godkender`) baggodkender
- Teksten opdateres: *"Forsøger opr. godkenders baggodkender"*
- Kandidaten sendes igen igennem Trin 2 og Trin 3
---
### Trin 5 — Forsøg med ferieafløserens baggodkender (2. niveau)
Hvis trin 4 heller ikke gav en gyldig godkender, forsøger systemet
**ferieafløserens** (`#NyGodkender`) baggodkender.
NyGodkender (original afløser) → Medarbejder.GodkendAf → ny kandidat
**Regler:**
- Slår op på den registrerede afløsers baggodkender
- Teksten opdateres: *"Forsøger ferieafløsers baggodkender"*
- Kandidaten sendes igen igennem Trin 2 og Trin 3
---
### Trin 6 — Fallback: Tilbage til den oprindelige godkender
Hvis **ingen** af ovenstående trin gav en gyldig afløser, falder
systemet tilbage til den **oprindelige fraværende godkender**.
Alle afløsere afvist → tilbage til BSGODAF.Godkender
**Regler:**
- `#NyGodkender` sættes til den originale godkenders initialer
- `#FallBack` sættes til `true` (signal til kaldende task)
- Teksten sættes til:
*"OutOfOffice -> fallback til oprindelig (ingen kunne håndtere)"*
> ⚠️ **Bemærk:** Fallback betyder at bilaget stadig kræver godkendelse
> — det er blot sendt tilbage til den person der egentlig er fraværende.
> Det er op til den kaldende proces at håndtere dette scenarie.
---
## 📊 Flowdiagram
Start: Hent afløser fra BS_Bilag_GodkAflos
│
▼
Er afløser fundet?
├─ NEJ ──────────────────────────────────────────┐
└─ JA │
│ │
▼ │
Er afløser selv fraværende? (TjekNyGodk) │
├─ JA: afvis afløser │
└─ NEJ │
│ │
▼ │
Har afløser allerede godkendt? (TjekAnsvar) │
├─ JA: afvis afløser │
└─ NEJ → ✅ Brug denne afløser │
│
Ingen afløser fundet endnu? │
│ │
▼ │
Forsøg opr. godkenders baggodkender │
→ TjekNyGodk + TjekAnsvar │
└─ Fundet → ✅ Brug denne │
│
Stadig ingen? │
│ │
▼ │
Forsøg ferieafløserens baggodkender │
→ TjekNyGodk + TjekAnsvar │
└─ Fundet → ✅ Brug denne │
│
Stadig ingen? ◄──────────────────────────────────┘
│
▼
⚠️ FALLBACK: Tilbage til original godkender
(#FallBack = true)
---
## 📤 Output-parametre
Når tasken er færdig, returneres følgende parametre til den kaldende
process:
| Parameter | Type | Beskrivelse |
|-----------|------|-------------|
| `#NyGodkender` | String | Initialer på den valgte godkender |
| `#NyGodkenderArt` | UShort | Type af godkender (0 = normal) |
| `#Tekst` | String | Log over hvad systemet forsøgte |
| `#FallBack` | Bool | `true` hvis ingen afløser kunne findes |
---
## ⚙️ Konfigurationstips
### Sådan registrerer du en ferieafløser
1. Gå til tabellen **BS_Bilag_GodkAflos**
2. Opret en ny post med:
- `Godkender` = den fraværendes initialer
- `NyGodkender` = afløserens initialer
- `StartDato` = første feriedag
- `SlutDato` = sidste feriedag
3. Gem posten
### Sådan sætter du en baggodkender op
1. Gå til **Medarbejder**-stamkortet
2. Find den relevante medarbejder
3. Udfyld feltet `GodkendAf` med initialer på baggodkenderen
4. Gem
---
## ❓ Ofte stillede spørgsmål
**Q: Hvad sker der hvis afløseren også er på ferie?**
> Systemet opdager dette automatisk og forsøger næste niveau i kæden.
**Q: Kan der være cirkulære referencer? (A → B → A)**
> Den nuværende implementation beskytter ikke eksplicit mod cirkulære
> kæder. Sørg for at baggodkendere ikke peger tilbage på hinanden.
**Q: Hvad betyder `#FallBack = true`?**
> Det betyder at systemet ikke fandt nogen tilgængelig afløser, og
> bilaget er tildelt den originale (fraværende) godkender. Den kaldende
> process bør håndtere dette — f.eks. ved at sende en advarsel.
**Q: Hvad er `NyGodkenderArt`?**
> Det er en klassifikation af godkendertypen. Værdien `0` bruges som
> signal om at søgningen stadig er i gang. En anden værdi betyder at
> godkenderen er af en særlig type (f.eks. systemgodkender), og
> søgningen stoppes.
---
*Sidst opdateret: baseret på BS_Bilag_GodkAflosBestem task-kode*