# Afgeleide attributen instellen

Schrijf vanuit de workflow een sleutel/waarde naar de factuur: statisch, via expressies of met een LLM, en gebruik die waarde vervolgens als kolom in een goedkeuringsmatrix, voorwaardelijke vertakking of exportveld.

Gebruik **Afgeleid attribuut instellen** om een bedrijfslabel op de factuur op te slaan (bijvoorbeeld `business_line` = `Line-A` of `MOC`) en koppel dat label vervolgens aan een kolom in je **goedkeuringsmatrix voor boekingsrekeningen**, zodat de juiste goedkeurders worden geselecteerd.

Onder **Waardebron** kies je hoe de waarde wordt bepaald:

- **Statische waarde**: gewone tekst of expressietokens (bijvoorbeeld `Online`, `Invoice ${invoice_number}`)
- **Afgeleid met LLM**: een korte instructie; Cortena stuurt de factuur, regelitems en boekingsmatch naar een LLM en slaat de teruggegeven waarde plus een reden op

Als je afgeleide velden op de factuurdetails wilt **tonen** of **bewerken** en ze wilt koppelen aan omschrijvingen in Twinfield of Exact Online, zie [Afgeleide attributen op facturen tonen en bewerken](https://help.cortena.ai/guides/workflows/show-edit-derived-attributes).

**Voor wie dit is:** Financiële en workflowbeheerders die goedkeuringsroutering nodig hebben die afhankelijk is van iets wat Cortena niet als vast veld extraheert, zoals **bedrijfsonderdeel**, kanaal of entiteitssegment, en die al een **goedkeuringsmatrix** in een spreadsheet gebruiken of dat van plan zijn. Ook nuttig wanneer het label moeilijk alleen met een Voorwaarde uit te drukken is en een LLM het kan classificeren op basis van leveranciers- en boekingscontext.

## Wat deze functie doet

**Afgeleid attribuut instellen** is een **actie**-stap in een workflow. Wanneer een factuur deze stap bereikt, schrijft Cortena één **attribuutsleutel** en **waarde** naar de factuur (bijvoorbeeld `business_line` → `Line-A`).

Veelvoorkomende patronen:

- **Voorwaarde → Statisch instellen**: verschillende vertakkingen schrijven verschillende vaste waarden en komen daarna weer samen vóór een **Goedkeuring** voor een boekingsrekening
- **Instellen met LLM (zonder Voorwaarde)**: één stap classificeert het attribuut op basis van de factuurcontext; je kunt optioneel routeren op **Geslaagd** versus **Leeg / fout**

In de stap **Goedkeuring** selecteer je welke afgeleide attributen deelnemen aan het **matchen met de matrix**. Cortena zoekt naar overeenkomende kolommen in de matrixspreadsheet (bijvoorbeeld **Bedrijfsonderdeel**) en gebruikt de factuurwaarde om te bepalen welke rijen en dus welke goedkeurders van toepassing zijn.

## Hoe dit in de goedkeuringsmatrix past

| Onderdeel | Wat je configureert | Wat er tijdens runtime gebeurt |
| --- | --- | --- |
| **Voorwaarde** (optioneel) | Vertakkingen op leverancier, inkooporder, factuurtekst, bedrag, … | De factuur volgt één pad (bijvoorbeeld Line-A versus Line-B). Sla dit over als je in plaats daarvan **Afgeleid met LLM** gebruikt |
| **Afgeleid attribuut instellen** | **Attribuutsleutel** · **Statische waarde** of instructie voor **Afgeleid met LLM** | De waarde wordt op de factuur opgeslagen (chip onder het factuurnummer; optioneel veld boven de regelitems) |
| **Goedkeuring** (regels voor boekingsrekening) | **Afgeleide attributen voor matrixmatching**: sleutels + korte omschrijvingen selecteren | Matrixrijen worden op die kolom gefilterd (exacte match; lege cel = elke waarde) |
| **Matrixspreadsheet** | Kolom zoals **Bedrijfsonderdeel** met `Line-A` / `Line-B` / leeg | Alleen overeenkomende rijen blijven over voor het bepalen van de goedkeurders |

Gerelateerde verdieping: [Goedkeuringsmatrix](https://help.cortena.ai/guides/workflows/approval-matrix).

## Waarden die met een LLM zijn afgeleid

Wanneer **Waardebron** **Afgeleid met LLM** is, gebruikt Cortena geen vaste tekst. Het stuurt je **Instructie voor de LLM** samen met de huidige factuur (koptekst, regelitems en boekingsmatch) naar het model en vraagt om:

- een **waarde** voor de attribuutsleutel (bijvoorbeeld `MOC` of `SOC`)
- een korte **reden** die uitlegt waarom

Als het model een bruikbare waarde teruggeeft, slaat Cortena beide op. Wanneer het attribuut op de factuurdetails boven de regelitems wordt getoond, kun je de muisaanwijzer op het veld plaatsen om de **reden** van de LLM te lezen (met dezelfde tooltipstijl als andere factuuruitleg).

### Wanneer de LLM niets teruggeeft of faalt

Kies onder **Wanneer de LLM niets teruggeeft of faalt** één beleid:

| Optie | Wat er gebeurt | Uitgangen op het canvas |
| --- | --- | --- |
| **Een lege waarde instellen en doorgaan** | Slaat een leeg attribuut op en volgt het normale pad met één uitgang | Eén uitgaande verbinding (zoals bij Statisch) |
| **Het pad Leeg / fout volgen** | Slaat een leeg attribuut op en routeert via de uitgang **Leeg / fout** | Twee gelabelde uitgangen: **Geslaagd** en **Leeg / fout**. Verbind beide |

**Validatie bij publiceren:** als je **Het pad Leeg / fout volgen** kiest, vereist de workfloweditor beide randen **Geslaagd** en **Leeg / fout** voordat je kunt publiceren. Gebruik **Leeg / fout** voor een stap voor menselijke controle, een statische terugval of een ander goedkeuringspad.

### Voorbeeldinstructie

> Classificeer het bedrijfsonderdeel als `MOC` of `SOC` op basis van de leverancier en de boekingsrekeningen. Geef als waarde alleen een van deze codes terug.

Houd toegestane waarden **exact** gelijk aan de celwaarden in de kolom van je goedkeuringsmatrix, inclusief hoofdlettergebruik.

## Voorbeeld: bedrijfsonderdeel vóór goedkeuring

**Doel:** Facturen voor leverancier *Acme Online* moeten het bedrijfsonderdeel **Online** gebruiken; al het overige gebruikt **Retail**. De goedkeurders in de matrix verschillen zowel op basis van **Bedrijfsonderdeel** als van grootboekrekening en bedragscategorie.

Je kunt dit doen met **Voorwaarde + Statisch**, of met één stap **Afgeleid met LLM** wanneer de regel moeilijker als filters uit te drukken is.

### Optie A: Voorwaarde + Statische waarde

#### 1. Vertak met een Voorwaarde

1. Open **Workflow** → **Factuurworkflow** (of de workflow die je beheert).
2. Voeg vóór je **Goedkeuring** voor de boekingsrekening een stap **Voorwaarde** toe.
3. Maak twee vertakkingen, bijvoorbeeld:
   - **Als** de leveranciersnaam overeenkomt met *Acme Online* (of met het patroon voor factuurtekst of inkooporder van jouw keuze)
   - **Anders**: alle andere facturen

#### 2. Stel het afgeleide attribuut in op elke vertakking

1. Voeg op de vertakking **Als** **Afgeleid attribuut instellen** toe (onder **Acties** in **STAP TOEVOEGEN**).
2. Configureer in het paneel aan de rechterkant:
   - **Attribuutsleutel:** `business_line` (kleine letters, cijfers en underscores; moet met een letter beginnen)
   - **Waardebron:** **Statische waarde**
   - **Waarde:** `Online` (gewone tekst is voldoende)
3. Voeg op de vertakking **Anders** nog een **Afgeleid attribuut instellen** toe met dezelfde sleutel `business_line` en de waarde `Retail`.
4. Verbind beide vertakkingen zodat ze samenkomen in je stap **Goedkeuring** die de goedkeuringsmatrix gebruikt.

### Optie B: Afgeleid met LLM (één stap)

1. Voeg één **Afgeleid attribuut instellen** toe vóór **Goedkeuring** (een Voorwaarde is niet nodig).
2. **Attribuutsleutel:** `business_line`
3. **Waardebron:** **Afgeleid met LLM**
4. **Instructie voor de LLM:** bijvoorbeeld `Classify business line as Online if the supplier is Acme Online (or clearly online retail); otherwise Retail. Return only Online or Retail.`
5. Kies onder **Wanneer de LLM niets teruggeeft of faalt** voor **Een lege waarde instellen en doorgaan**, of voor **Het pad Leeg / fout volgen** en verbind beide uitgangen (bijvoorbeeld Leeg / fout → een controlestap).
6. Verbind **Geslaagd** (of het enkele uitgaande pad) met je matrixstap **Goedkeuring**.

**Waarden moeten overeenkomen met het werkblad.** Matrixmatching gebruikt een **exacte** tekstmatch (na normale verwijdering van voor- en achterliggende spaties). Als de stap `Online` schrijft maar de cel in het werkblad `ONLINE` bevat of spaties aan het einde heeft, krijg je mogelijk niet de verwachte rij. Houd hoofdlettergebruik en spelling consistent voor zowel statische als LLM-uitvoer.

### 3. Schakel het attribuut in op de stap Goedkeuring

1. Selecteer de stap **Goedkeuring** die **regels voor boekingsrekeningen** / de matrix gebruikt.
2. Zoek **Afgeleide attributen voor matrixmatching**.
3. Vink **`business_line`** aan.
4. Voeg een **korte omschrijving** toe voor de analyse van de kopteksten, bijvoorbeeld: `Business line: Online, Retail`. Deze omschrijving helpt Cortena de juiste kolom in de spreadsheet te detecteren bij het analyseren of vernieuwen van het matrixschema.
5. Als de lijst leeg is, voeg je eerst in **deze** workflow minstens één stap **Afgeleid attribuut instellen** toe. Sleutels worden alleen weergegeven wanneer zulke stappen op het canvas bestaan.

### 4. Plaats de kolom in de matrixspreadsheet

1. Open het beheerde Google Sheet voor de goedkeuringsmatrix (zie [Goedkeuringsmatrix](https://help.cortena.ai/guides/workflows/approval-matrix)).
2. Zorg voor een kolom voor het attribuut, meestal **Bedrijfsonderdeel** voor de sleutel `business_line`.
3. Vul de cellen met dezelfde waarden die je in de workflow instelt (`Online`, `Retail`). Laat een cel **leeg** wanneer die rij moet overeenkomen met **elk** bedrijfsonderdeel (jokerteken).
4. Sla het matrixschema op of vernieuw het als je een nieuwe kolom hebt toegevoegd, zodat Cortena de kopteksten opnieuw koppelt.

### 5. Wat je op een factuur ziet

Nadat de instelstap is uitgevoerd, toont het factuurdetail een chip zoals **`business_line: Online`** bij het factuurnummer (en, als je **Tonen op factuurdetail** / **Bewerken toestaan** inschakelt, een volledig veld boven de regelitems: zie [Afgeleide attributen op facturen tonen en bewerken](https://help.cortena.ai/guides/workflows/show-edit-derived-attributes)). Wanneer de stap **Goedkeuring** wordt uitgevoerd, filtert Cortena de matrixrijen op basis van die waarde voordat de goedkeurders worden bepaald.

## De stap Afgeleid attribuut instellen configureren

1. Ga naar **Workflow** en open de editor voor de tenant.
2. Voeg via **STAP TOEVOEGEN** → **Acties** de stap **Afgeleid attribuut instellen** toe.
3. Stel een duidelijke **Label** in (weergegeven in de workflowbalk / activiteitscontext).
4. Vul de **Attribuutsleutel** in.
5. Kies een **Waardebron**:
   - **Statische waarde**: vul **Waarde** in (gewone tekst en/of tokens)
   - **Afgeleid met LLM**: vul **Instructie voor de LLM** in en kies een beleid onder **Wanneer de LLM niets teruggeeft of faalt**
6. Schakel optioneel **Tonen op factuurdetail** / **Bewerken toestaan op factuurdetail** in (zie [Afgeleide attributen op facturen tonen en bewerken](https://help.cortena.ai/guides/workflows/show-edit-derived-attributes)).
7. Verbind de stap op het pad waarop de waarde moet worden bepaald (vaak vóór matrixstap **Goedkeuring**). Verbind bij LLM + **Het pad Leeg / fout volgen** zowel **Geslaagd** als **Leeg / fout**.
8. **Sla de workflow op** / publiceer deze.

### Regels voor attribuutsleutels

- Moet voldoen aan: begin met een letter, gevolgd door alleen kleine letters, cijfers of underscores
- Voorbeelden: `business_line`, `channel`, `cost_pool`
- Ongeldige sleutels (spaties, hoofdletters, beginnen met een cijfer) zorgen ervoor dat de stap faalt

### Statische waarden: gewone tekst of expressies

- **Gewone tekst** wordt ongewijzigd opgeslagen (`Line-A`, `Online`).
- Optionele **dollar-accolade**-expressies (klik op een variabele in het paneel om deze te kopiëren), bijvoorbeeld `${invoice_number}` of `${purchase_order_number}`.
- Je kunt ook verwijzen naar een attribuut dat eerder is ingesteld: `${derived.business_line}`.
- Als je een letterlijke `${…}` in de waarde wilt behouden, plaats je een backslash vóór het dollarteken.
- Als de opgeloste waarde leeg is, **faalt** de stap. Vermijd expressies die voor jouw facturen een lege waarde opleveren.

Ondersteunde tokens zijn onder andere: `invoice_number`, `purchase_order_number`, `invoice_supplier_name`, `invoice_recipient_company`, `invoice_recipient_name`, `currency` en `derived.<key>`.

### Afgeleid met LLM: instructie en beleid voor leeg/fout

- Schrijf een concrete instructie waarin je de toegestane uitvoerwaarden noemt wanneer deze een goedkeuringsmatrix voeden.
- Cortena voegt de factuurkoptekst, regelitems en boekingsmatch samen met de instructie. Je hoeft factuurgegevens niet zelf in de instructie te plakken.
- **Een lege waarde instellen en doorgaan**: één uitgaand pad; het lege attribuut wordt opgeslagen en de workflow gaat door.
- **Het pad Leeg / fout volgen**: het canvas toont **Geslaagd** en **Leeg / fout**; beide moeten vóór publicatie verbonden zijn.

## Optioneel: later vertakken op een afgeleid attribuut

Nadat een waarde is opgeslagen, kan een latere **Voorwaarde** het criterium **Afgeleid attribuut** gebruiken (attribuutsleutel + toegestane waarden) om opnieuw te routeren, bijvoorbeeld naar een exportpad of extra controle, zonder het label opnieuw af te leiden.

## Tips en beperkingen

- **Alleen dezelfde workflow**: de selectievakjes voor de matrix tonen sleutels uit stappen **Afgeleid attribuut instellen** in **deze** workflowdefinitie.
- **Omschrijvingen zijn belangrijk**: korte, concrete omschrijvingen verbeteren de kolomdetectie wanneer Cortena de spreadsheet analyseert of vernieuwt.
- **Lege matrixcel = jokerteken** voor dat attribuut; een ontbrekende waarde op de factuur slaat die filterdimensie over.
- **Overschrijven**: als een andere instelstap met dezelfde sleutel wordt uitgevoerd, vervangt deze de vorige waarde (en de metagegevens van de LLM-reden wanneer de nieuwe waarde met een LLM is afgeleid).
- **LLM-reden op de factuur**: plaats de muisaanwijzer op een getoond afgeleid veld om te zien waarom de LLM de waarde heeft gekozen; het bewerken van de waarde op de factuur verandert de opgeslagen redenstekst niet.
- **Leeg bij Statisch faalt; leeg bij LLM is configureerbaar**: een Statische expressie die leeg wordt opgelost, laat de stap falen. Leegte of een fout bij de LLM volgt je beleid voor **Wanneer de LLM niets teruggeeft of faalt**.
- **Rechten**: voor het bewerken van de workflow heb je rechten voor workflowbeheer van de tenant nodig.
- Gebruik bij voorkeur één duidelijke sleutel (bijvoorbeeld `business_line`) in plaats van veel overlappende labels, tenzij de matrix echt meerdere dimensies nodig heeft.

## Naslag

| Taak | Waar |
| --- | --- |
| **Afgeleid attribuut instellen** toevoegen | Editor **Workflow** → **STAP TOEVOEGEN** → **Acties** |
| Statisch of LLM kiezen | Paneel van de stap → tabbladen **Waardebron** |
| Routering bij leeg / fout van LLM | Paneel van de stap → **Wanneer de LLM niets teruggeeft of faalt**; verbind **Geslaagd** / **Leeg / fout** wanneer vereist |
| Sleutels selecteren voor matrixmatching | Stap **Goedkeuring** → **Afgeleide attributen voor matrixmatching** |
| Waarden voor de overeenkomende kolom invullen | Google Sheet voor de goedkeuringsmatrix (bijvoorbeeld **Bedrijfsonderdeel**) |
| Opgeslagen waarde op een factuur bekijken | Factuurdetail: chip onder het factuurnummer; optioneel veld boven de regelitems |
| LLM-reden lezen | Plaats de muisaanwijzer op het getoonde afgeleide attribuutveld in het factuurdetail |
| Vertakken op een opgeslagen waarde | **Voorwaarde** → criterium **Afgeleid attribuut** |
