Azure Document Intelligence Custom Models Voor De Overheid

šŸ’¼ Management Samenvatting

Met Azure Document Intelligence kunnen Nederlandse overheidsorganisaties eigen AI-modellen trainen voor het automatisch uitlezen en interpreteren van documenten, formulieren en dossiers. Custom models maken het mogelijk om zeer domeinspecifieke informatie – zoals zaaknummers, BSN-achtige identificatoren, vergunningscodes of beleidsreferenties – betrouwbaar te herkennen en te structureren.

Aanbeveling
IMPLEMENT
Risico zonder
High
Risk Score
8/10
Implementatie
140u (tech: 80u)
Van toepassing op:
āœ“ Azure
āœ“ M365
āœ“ AI Services

Zonder goed ontworpen en beheerde custom models ontstaat het risico dat gevoelige informatie verkeerd wordt geĆÆnterpreteerd, dat beslissingen op basis van onvolledige of foutieve data worden genomen en dat de organisatie niet meer kan uitleggen hoe uit documenten afgeleide conclusies tot stand zijn gekomen. Dit raakt direct aan transparantievereisten uit de EU AI Act, de AVG en de Wet open overheid. Een ondoordachte inzet van document-AI kan bovendien leiden tot datalekken (bijvoorbeeld door het per ongeluk indexeren van niet-geanonimiseerde dossiers) en tot oneerlijke behandeling van burgers wanneer cruciale velden consequent verkeerd worden herkend.

PowerShell Modules Vereist
Primary API: Azure Portal, Azure Resource Manager
Connection: Connect-AzAccount
Required Modules: Az.Accounts

Implementatie

Dit artikel beschrijft hoe u custom models in Azure Document Intelligence ontwerpt, traint, valideert en beheert binnen de context van Nederlandse overheidsorganisaties. We behandelen de volledige levenscyclus: van use‑case selectie en dataselectie tot labeling, modeltraining, kwaliteitsmeting, productie-implementatie, monitoring en periodieke hertraining. Daarbij leggen we expliciet de koppeling met EU AI Act‑eisen, de BIO en AVG, en geven we concrete handvatten voor governance, auditbaarheid en documentatie. Tot slot laten we zien hoe u met eenvoudige scripts kunt controleren of alle vereiste documentatie, kwaliteitsmetingen en modelconfiguraties up‑to‑date zijn.

Use‑cases voor custom models in de publieke sector

Voor Nederlandse overheidsorganisaties is het gebruik van custom models in Azure Document Intelligence vooral interessant waar grote hoeveelheden semi‑gestructureerde documenten moeten worden verwerkt. Denk aan vergunningaanvragen met uiteenlopende formuliertypen, subsidiedossiers, bezwaar- en beroepsschriften, contracten met leveranciers, of gescande archiefstukken die onder de Wet open overheid vallen. In al deze situaties is de informatiebehoefte specifieker dan wat standaardmodellen kunnen leveren. Een generiek model kan bijvoorbeeld wel namen en adressen herkennen, maar mist de context om onderscheid te maken tussen een aanvrager, gemachtigde, belanghebbende of interne behandelaar. Custom models vullen dit gat door precies die velden te leren die relevant zijn voor het betreffende proces en de betreffende organisatie.

Het definiĆ«ren van een goede use‑case begint met een procesanalyse. Welke besluiten of handelingen worden nu handmatig genomen op basis van documenten, hoeveel tijd kost dit en welke kwaliteitsrisico’s zijn er? Vervolgens wordt bepaald welke velden minimaal nodig zijn om dat proces (gedeeltelijk) te automatiseren of te versnellen. Bij een vergunningenproces kan dat bijvoorbeeld bestaan uit het zaaknummer, het type aanvraag, de locatiegegevens, relevante datums, de aanvrager en het van toepassing zijnde beleidskader. Voor elke van deze velden wordt vastgesteld hoe die in documenten terugkomt, welke varianten er zijn en welke uitzonderingen vaak optreden. Een zorgvuldige inventarisatie voorkomt dat het model later moet worden uitgebreid met ontbrekende velden, wat extra trainingsrondes en governance‑besluiten vraagt.

Daarnaast moet bij elke use‑case een ethische en juridische afweging worden gemaakt. Automatisch uitlezen van documenten mag nooit leiden tot beslissingen die volledig zonder menselijke tussenkomst worden genomen, tenzij de risico’s zeer beperkt zijn en de wetgeving dit toelaat. In de meeste overheidscontexten blijft menselijke beoordeling daarom noodzakelijk, bijvoorbeeld door AI alleen te gebruiken voor voorbewerking en dossieropbouw, terwijl de uiteindelijke beslissing door een behandelaar wordt genomen. Deze rolverdeling moet vooraf helder worden vastgelegd, inclusief afspraken over wie verantwoordelijk is voor de interpretatie van de door het model geleverde velden en wat er gebeurt wanneer het model aantoonbaar fouten maakt.

Een laatste cruciale overweging is interoperabiliteit. De informatie die uit Document Intelligence komt, wordt vrijwel altijd doorgezet naar andere systemen, zoals een zaaksysteem, DMS, CRM of een specifieke vakapplicatie. Dit betekent dat veldnamen, datatypen en coderingen moeten aansluiten op bestaande gegevensmodellen en dat datakwaliteitseisen consistent zijn. Een veld als ā€˜besluitdatum’ moet bijvoorbeeld altijd in dezelfde notatie worden opgeslagen, ongeacht of het uit een oud gescand formulier of uit een recente digitale aanvraag komt. Door deze afhankelijkheden vroegtijdig in kaart te brengen, voorkomt u duur herontwerp van interfaces en mappings later in het traject.

Dataselectie, labeling en kwaliteitsborging

De kwaliteit van custom models staat of valt met de kwaliteit van de trainingsdata en de wijze waarop deze is gelabeld. Voor Nederlandse overheidsorganisaties is dit extra gevoelig, omdat documenten vaak persoonsgegevens, bijzondere persoonsgegevens of vertrouwelijke beleidsinformatie bevatten. De eerste stap is daarom een zorgvuldige selectie van documenten die representatief zijn voor de praktijk, maar die waar mogelijk geanonimiseerd of gepseudonimiseerd zijn voordat ze voor training worden gebruikt. Hierbij moet in nauwe samenwerking met de Functionaris Gegevensbescherming en security officers worden bepaald welke categorieƫn gegevens wel en niet in trainingssets mogen voorkomen en onder welke voorwaarden.

Na de selectie volgt het labelproces, waarbij menselijke labelaars in een toolingomgeving aangeven welke velden waar in het document voorkomen. Dit is geen administratieve bijzaak maar een cruciale kwaliteitsstap. Inconsistente labeling – bijvoorbeeld doordat verschillende labelaars net andere keuzes maken – vertaalt zich direct in inconsistente modeluitvoer. Het is daarom essentieel om een helder labelprotocol op te stellen, met voorbeelden van goede en foute labeling, duidelijke definities van elk veld en afspraken over hoe om te gaan met twijfelgevallen. Regelmatige inter‑annotator agreement‑metingen helpen om te controleren of labelaars het eens zijn over de interpretatie van de velden en waar aanvullende training nodig is.

Kwaliteitsborging gaat verder dan alleen het meten van nauwkeurigheid of F1‑scores. Voor overheidsprocessen is het vooral belangrijk om inzicht te hebben in fouttypen en hun impact. Een fout geclassificeerd veld dat alleen cosmetische informatie bevat, is minder ernstig dan een fout in de categorie ā€˜beslissingsrelevante datum’ of ā€˜rechtsgrond’. Daarom moeten kwaliteitsrapportages niet alleen gemiddelden tonen, maar ook foutanalyses per veld, per documentsoort en per scenario. Deze analyses vormen de basis voor besluitvorming over welk automatiseringsniveau verantwoord is en waar aanvullende menselijke controles nodig zijn. Dit sluit direct aan op de risicogebaseerde benadering uit de EU AI Act.

Tot slot moet de volledige herkomst van trainings- en testdata worden gedocumenteerd. Dit betekent dat voor elke dataset wordt bijgehouden uit welke bronsystemen documenten afkomstig zijn, welke filters of selectieregels zijn toegepast, hoe lang de data wordt bewaard en onder welke grondslag deze wordt gebruikt. Deze informatie is nodig voor AVG‑conformiteit, maar ook om later, bij incidenten of modeldrift, te kunnen herleiden of problemen terug te voeren zijn op de data of op het model zelf. Door dit vanaf het begin in een centrale documentatierepository vast te leggen, voorkomt u dat auditvragen later moeilijk te beantwoorden zijn.

Productie-implementatie, governance en monitoring

Zodra een custom model voldoende volwassen is, verschuift de aandacht naar implementatie in productie en langetermijnbeheer. Dit begint met een gecontroleerde uitrol, bijvoorbeeld in een proefomgeving of met een beperkte groep dossiers, waarbij resultaten systematisch worden vergeleken met de bestaande werkwijze. In deze fase is het van belang om duidelijke acceptatiecriteria te hanteren: bij welke combinatie van nauwkeurigheid, fouttypen en doorlooptijdverbetering wordt het model als ā€˜geschikt voor productie’ beschouwd? Deze criteria moeten vooraf zijn afgestemd met proceseigenaren, juristen en informatiebeveiliging, zodat er geen discussie ontstaat zodra de eerste resultaten beschikbaar zijn.

Governance rond custom models vraagt om heldere rolverdeling. Er moet een formele model‑eigenaar zijn (vaak de proceseigenaar) die eindverantwoordelijk is voor het besluit om een model in productie te nemen en te houden. Daarnaast zijn er technische beheerders die zorgen voor deployment, schaalbaarheid en beveiliging binnen Azure, en data‑specialisten die toezicht houden op datakwaliteit en performancemetingen. Voor elk van deze rollen moeten taken en bevoegdheden worden vastgelegd, inclusief escalatieroutes voor incidenten zoals onverwachte foutpieken, datalekken of ongewenste bias. Deze governance‑structuur vormt ook de basis voor conformiteit met de EU AI Act, die expliciet vraagt om human oversight en duidelijke verantwoordingslijnen.

Monitoring in de exploitatiefase gaat verder dan alleen technische beschikbaarheid. Naast het bewaken van latency, foutcodes en resourceverbruik, moet de organisatie ook periodiek controleren of de inhoudelijke prestaties van het model nog aansluiten bij de werkelijkheid. Dit kan bijvoorbeeld door steekproefsgewijs dossiers te laten beoordelen, waarbij een tweede lijn controleert of de door het model herkende velden compleet en juist zijn en of er systematische afwijkingen ontstaan in bepaalde documentsoorten of burgergroepen. Signalen van modeldrift – bijvoorbeeld omdat formulieren zijn aangepast of nieuwe documenttypes zijn geĆÆntroduceerd – moeten leiden tot een herziening van de trainingsset en zo nodig een nieuwe trainingsronde.

Een praktische manier om deze monitoring te operationaliseren is het gebruik van dashboards en eenvoudige scripts die onder andere nagaan of voor alle gebruikte modellen actuele documentatie bestaat, of kwaliteitsmetingen recent zijn uitgevoerd en of drempelwaarden voor nauwkeurigheid en foutpercentages nog worden gehaald. De in dit artikel beschreven PowerShell‑scripts zijn ontworpen om een deel van deze controles te automatiseren, bijvoorbeeld door metadata over modellen en documentatiebestanden te analyseren en een samenvattend rapport voor auditors en management te genereren. Hiermee wordt de vertaalslag gemaakt van technische AI‑configuratie naar bestuurbare compliance‑informatie.

Geautomatiseerde controles en rapportage

Gebruik PowerShell-script custom-models.ps1 (functie Invoke-Monitoring) – Voert geautomatiseerde controles uit op de documentatie- en kwaliteitsstatus van custom models in Azure Document Intelligence..

Om structureel te kunnen aantonen dat custom models binnen Azure Document Intelligence onder controle zijn, hebben organisaties behoefte aan reproduceerbare checks. Een handmatige controle van documentatie, configuraties en kwaliteitsrapportages is arbeidsintensief en foutgevoelig, vooral wanneer meerdere modellen parallel in gebruik zijn voor verschillende processen. Door deze controles te standaardiseren in een script, kan periodiek – bijvoorbeeld maandelijks of voorafgaand aan een audit – een consistent overzicht worden gegenereerd van welke modellen in gebruik zijn, welke documentatie beschikbaar is, hoe recent deze is bijgewerkt en waar hiaten bestaan. Dit artikel koppelt de beschreven governance‑aanpak daarom expliciet aan een PowerShell‑script dat deze analyses geautomatiseerd uitvoert en resultaten samenvat in een compact rapport.

Remediatie, hertraining en continue verbetering

Gebruik PowerShell-script custom-models.ps1 (functie Invoke-Remediation) – Genereert templates en acties voor het bijwerken van documentatie en kwaliteitsdossiers van custom models..

Geen enkel custom model blijft permanent optimaal. Wetgeving wijzigt, formulieren veranderen en maatschappelijke verwachtingen rond transparantie en uitlegbaarheid nemen toe. Daarom moet remediatie worden gezien als een continu proces: zodra monitoring laat zien dat kwaliteitsdoelen niet meer worden gehaald of dat documentatie verouderd is, moet een gestructureerd verbetertraject worden gestart. Dit traject omvat het actualiseren van de use‑casebeschrijving, het uitbreiden of opschonen van trainingsdata, het bijwerken van labelrichtlijnen en het opnieuw trainen en valideren van het model. Cruciaal is dat al deze stappen zorgvuldig worden gelogd, zodat later kan worden aangetoond welke maatregelen wanneer zijn genomen en met welk resultaat.

De bijbehorende remediatie‑scripts ondersteunen dit proces door automatisch templates te genereren voor ontbrekende documentatie, lijsten van prioritaire modellen te maken en basisrapportages op te leveren die het gesprek tussen data‑specialisten, juristen en bestuurders faciliteren. Zo wordt voorkomen dat kwaliteits- en compliancevraagstukken blijven liggen vanwege gebrek aan tijd of overzicht. Door remediatie te verankeren in reguliere beheerprocessen – bijvoorbeeld als vast onderdeel van het release‑ en wijzigingsproces – groeit Document Intelligence uit tot een betrouwbare infrastructuur waar burgers op kunnen vertrouwen en waar auditors snel inzicht krijgen in de beheersingsmaatregelen rond AI‑gestuurde documentverwerking.

Compliance & Frameworks

Automation

Gebruik het onderstaande PowerShell script om deze security control te monitoren en te implementeren. Het script bevat functies voor zowel monitoring (-Monitoring) als remediation (-Remediation).

PowerShell
<# .SYNOPSIS Monitoring en remediatie voor Azure Document Intelligence custom models .DESCRIPTION Voert geautomatiseerde controles uit op documentatie- en kwaliteitsstatus van custom models en genereert waar nodig templates en acties voor remediatie. .NOTES Filename: custom-models.ps1 Author: Nederlandse Baseline voor Veilige Cloud Created: 2025-11-26 Last Modified: 2025-11-26 Version: 1.0 Related JSON: content/ai/document-intelligence/custom-models.json .LINK https://github.com/[org]/m365-tenant-best-practise .EXAMPLE .\custom-models.ps1 -Monitoring Voert controles uit op de status van custom model documentatie en kwaliteitsmetingen. .EXAMPLE .\custom-models.ps1 -Remediation Genereert templates en basisdossiers voor ontbrekende documentatie. #> #Requires -Version 5.1 [CmdletBinding()] param( [Parameter()] [switch]$WhatIf, [Parameter()] [switch]$Monitoring, [Parameter()] [switch]$Remediation, [Parameter()] [string]$ConfigPath = "D:\Github\m365-tenant-best-practise\config\ai\document-intelligence-custom-models.json", [Parameter()] [string]$DocumentationRoot = "D:\Github\m365-tenant-best-practise\documentatie\ai-document-intelligence" ) $ErrorActionPreference = 'Stop' $VerbosePreference = 'Continue' function Get-CustomModelConfig { <# .SYNOPSIS Leest lokale configuratie van custom models in. .DESCRIPTION Verwacht een JSON-bestand met een eenvoudige structuur, bijvoorbeeld: { "models": [ { "name": "Vergunningen-Model", "id": "permits-model-01", "documentationFile": "vergunningen-model.md", "lastQualityReview": "2025-10-01", "status": "Production" } ] } .OUTPUTS Object met een eigenschap Models (array) voor verdere verwerking. #> [CmdletBinding()] param( [Parameter(Mandatory = $true)] [string]$Path ) if (-not (Test-Path -Path $Path)) { Write-Verbose "Configuratiebestand niet gevonden op pad: $Path. Er wordt een lege configuratie gebruikt." return [pscustomobject]@{ Models = @() } } Write-Verbose "Lezen van configuratie: $Path" $raw = Get-Content -Path $Path -Raw -ErrorAction Stop $json = $raw | ConvertFrom-Json -ErrorAction Stop if (-not $json.models) { Write-Verbose "Geen 'models' sectie gevonden in configuratie. Er wordt een lege lijst gebruikt." return [pscustomobject]@{ Models = @() } } return [pscustomobject]@{ Models = $json.models } } function Test-CustomModelDocumentation { <# .SYNOPSIS Controleert documentatie- en kwaliteitsstatus van custom models. .OUTPUTS PSCustomObject met compliance-resultaten. #> [CmdletBinding()] param( [Parameter(Mandatory = $true)] [string]$ConfigPath, [Parameter(Mandatory = $true)] [string]$DocumentationRoot, [Parameter()] [int]$MaxDocAgeDays = 365, [Parameter()] [int]$MaxQualityReviewAgeDays = 365 ) Write-Verbose "Start controle custom models met configuratie: $ConfigPath" $config = Get-CustomModelConfig -Path $ConfigPath $models = @($config.Models) if ($models.Count -eq 0) { Write-Host " Geen custom models geregistreerd in configuratie." -ForegroundColor Yellow return [pscustomobject]@{ IsCompliant = $false TotalModels = 0 DocumentedModels = 0 MissingDocumentation = @() OutdatedDocumentation = @() MissingQualityReview = @() OutdatedQualityReview = @() } } if (-not (Test-Path -Path $DocumentationRoot)) { Write-Host " Documentatie-root bestaat niet: $DocumentationRoot" -ForegroundColor Red } $documentedModels = 0 $missingDocs = @() $outdatedDocs = @() $missingQuality = @() $outdatedQuality = @() foreach ($model in $models) { $name = $model.name $docFileName = $model.documentationFile $lastQualityReview = $model.lastQualityReview Write-Verbose "Controleren model: $name" $docPath = if ($docFileName -and $DocumentationRoot) { Join-Path -Path $DocumentationRoot -ChildPath $docFileName } else { $null } $hasDoc = $false if ($docPath -and (Test-Path -Path $docPath)) { $hasDoc = $true $docItem = Get-Item -Path $docPath $age = (Get-Date) - $docItem.LastWriteTime if ($age.Days -gt $MaxDocAgeDays) { Write-Host " āš ļø Verouderde documentatie voor model '$name' ($($age.Days) dagen oud)" -ForegroundColor Yellow $outdatedDocs += $name } else { Write-Host " āœ… Documentatie actueel voor model '$name'" -ForegroundColor Green $documentedModels++ } } else { Write-Host " āŒ Ontbrekende documentatie voor model '$name'" -ForegroundColor Red $missingDocs += $name } if (-not $lastQualityReview) { Write-Host " āŒ Geen kwaliteitsreview-datum geregistreerd voor model '$name'" -ForegroundColor Red $missingQuality += $name } else { $parsed = $null if ([DateTime]::TryParse($lastQualityReview, [ref]$parsed)) { $qAge = (Get-Date) - $parsed if ($qAge.Days -gt $MaxQualityReviewAgeDays) { Write-Host " āš ļø Verouderde kwaliteitsreview voor model '$name' ($($qAge.Days) dagen oud)" -ForegroundColor Yellow $outdatedQuality += $name } } else { Write-Host " āŒ Ongeldige kwaliteitsreview-datum voor model '$name': $lastQualityReview" -ForegroundColor Red $missingQuality += $name } } } $isCompliant = ( ($missingDocs.Count -eq 0) -and ($outdatedDocs.Count -eq 0) -and ($missingQuality.Count -eq 0) -and ($outdatedQuality.Count -eq 0) ) return [pscustomobject]@{ IsCompliant = $isCompliant TotalModels = $models.Count DocumentedModels = $documentedModels MissingDocumentation = $missingDocs OutdatedDocumentation = $outdatedDocs MissingQualityReview = $missingQuality OutdatedQualityReview = $outdatedQuality } } function New-CustomModelDocumentationTemplate { <# .SYNOPSIS Genereert een documentatietemplate voor een custom model. #> [CmdletBinding()] param( [Parameter(Mandatory = $true)] [string]$ModelName, [Parameter(Mandatory = $true)] [string]$OutputPath ) $template = @" # Document Intelligence Custom Model: $ModelName **Laatst bijgewerkt:** $(Get-Date -Format "yyyy-MM-dd") **Documentatie-eigenaar:** [Naam eigenaar] **Status:** Concept ## 1. Use‑case en procescontext [Beschrijf het onderliggende proces, de doelstellingen en de plaats van het model in de keten.] ## 2. Modelbeschrijving [Beschrijf welke documenttypen worden ondersteund, welke velden worden geĆ«xtraheerd en hoe deze worden gebruikt.] ## 3. Dataselectie en labeling [Beschrijf de herkomst van de trainings- en testdata, anonymiseringsmaatregelen en labelrichtlijnen.] ## 4. Kwaliteitsmetingen [Beschrijf de laatste kwaliteitsreview, gebruikte metriek (bijvoorbeeld nauwkeurigheid per veld) en bevindingen.] ## 5. Risicoanalyse en mitigaties [Beschrijf relevante risico's (bijvoorbeeld foutieve besluitvorming, bias, datalekken) en bijbehorende maatregelen.] ## 6. Governance en verantwoordelijkheden [Beschrijf rolverdeling, escalatieroutes en frequentie van herbeoordeling.] ## 7. Compliance en referenties - EU AI Act: [Relevante artikelen] - AVG: [Relevante artikelen] - BIO / ISO 27001: [Relevante controls] "@ $folder = Split-Path -Path $OutputPath -Parent if (-not (Test-Path -Path $folder)) { New-Item -Path $folder -ItemType Directory -Force | Out-Null } $template | Out-File -FilePath $OutputPath -Encoding UTF8 Write-Host " Template gegenereerd: $OutputPath" -ForegroundColor Green } function Invoke-Monitoring { <# .SYNOPSIS Hoofdentrypoint voor monitoring van custom models. #> [CmdletBinding()] param() Write-Host "`nMonitoring: Document Intelligence Custom Models" -ForegroundColor Yellow Write-Host "================================================" -ForegroundColor Yellow $result = Test-CustomModelDocumentation -ConfigPath $ConfigPath -DocumentationRoot $DocumentationRoot Write-Host "`nResultaten:" -ForegroundColor Cyan Write-Host " Totaal modellen: $($result.TotalModels)" -ForegroundColor Cyan Write-Host " Modellen met actuele documentatie: $($result.DocumentedModels)" -ForegroundColor Cyan Write-Host " Ontbrekende documentatie: $($result.MissingDocumentation.Count)" -ForegroundColor $(if ($result.MissingDocumentation.Count -eq 0) { "Green" } else { "Red" }) Write-Host " Ontbrekende kwaliteitsreviews: $($result.MissingQualityReview.Count)" -ForegroundColor $(if ($result.MissingQualityReview.Count -eq 0) { "Green" } else { "Red" }) Write-Host " Verouderde documentatie: $($result.OutdatedDocumentation.Count)" -ForegroundColor $(if ($result.OutdatedDocumentation.Count -eq 0) { "Green" } else { "Yellow" }) Write-Host " Verouderde kwaliteitsreviews: $($result.OutdatedQualityReview.Count)" -ForegroundColor $(if ($result.OutdatedQualityReview.Count -eq 0) { "Green" } else { "Yellow" }) if ($result.IsCompliant) { Write-Host "`nāœ… COMPLIANT - Alle custom models hebben actuele documentatie en kwaliteitsreviews." -ForegroundColor Green return $result } else { Write-Host "`nāŒ NON-COMPLIANT - Er zijn hiaten in documentatie of kwaliteitsreviews." -ForegroundColor Red Write-Host " Gebruik -Remediation om templates te genereren voor ontbrekende documentatie." -ForegroundColor Yellow return $result } } function Invoke-Remediation { <# .SYNOPSIS Genereert templates voor ontbrekende documentatie. #> [CmdletBinding()] param() Write-Host "`nRemediatie: Document Intelligence Custom Models" -ForegroundColor Yellow Write-Host "================================================" -ForegroundColor Yellow $result = Test-CustomModelDocumentation -ConfigPath $ConfigPath -DocumentationRoot $DocumentationRoot if ($result.MissingDocumentation.Count -eq 0) { Write-Host " Geen ontbrekende documentatie gevonden." -ForegroundColor Green return } Write-Host "`nGenereren van documentatietemplates..." -ForegroundColor Cyan $config = Get-CustomModelConfig -Path $ConfigPath $modelsByName = @{} foreach ($m in $config.Models) { if ($m.name) { $modelsByName[$m.name] = $m } } foreach ($modelName in $result.MissingDocumentation) { if (-not $modelsByName.ContainsKey($modelName)) { Write-Host " Kon configuratie voor model '$modelName' niet vinden, overslaan." -ForegroundColor Yellow continue } $model = $modelsByName[$modelName] $docFileName = if ($model.documentationFile) { $model.documentationFile } else { ($modelName -replace '\s+', '-') + ".md" } $outputPath = Join-Path -Path $DocumentationRoot -ChildPath $docFileName if ($WhatIf) { Write-Host " [WhatIf] Zou template genereren voor model '$modelName' -> $outputPath" -ForegroundColor Yellow } else { New-CustomModelDocumentationTemplate -ModelName $modelName -OutputPath $outputPath } } Write-Host "`nāœ… Remediatie voltooid. Vul de gegenereerde templates aan met systeemspecifieke details." -ForegroundColor Green } # ============================================================================ # MAIN EXECUTION # ============================================================================ try { Write-Host "`n========================================" -ForegroundColor Cyan Write-Host "Document Intelligence Custom Models" -ForegroundColor Cyan Write-Host "Nederlandse Baseline voor Veilige Cloud" -ForegroundColor Cyan Write-Host "========================================`n" -ForegroundColor Cyan if ($Monitoring) { Invoke-Monitoring | Out-Null } elseif ($Remediation) { Invoke-Remediation } else { # Standaard: voer een compacte check uit en retourneer het resultaat $result = Test-CustomModelDocumentation -ConfigPath $ConfigPath -DocumentationRoot $DocumentationRoot if ($result.IsCompliant) { Write-Host "`nāœ… COMPLIANT" -ForegroundColor Green } else { Write-Host "`nāŒ NON-COMPLIANT" -ForegroundColor Red Write-Host "Run met -Monitoring voor gedetailleerde rapportage." -ForegroundColor Yellow Write-Host "Run met -Remediation om documentatietemplates te genereren." -ForegroundColor Yellow } return $result } } catch { Write-Error "Er is een fout opgetreden: $_" throw } finally { Write-Host "`n========================================`n" -ForegroundColor Cyan }

Risico zonder implementatie

Risico zonder implementatie
High: Hoog risico op foutieve of onverklaarbare besluitvorming op basis van verkeerd uitgelezen documenten, met mogelijke AVG‑inbreuken, klachten van burgers en negatieve auditbevindingen. Daarnaast wordt het moeilijk om aan te tonen dat AI‑gestuurde documentverwerking onder controle is volgens EU AI Act en BIO‑eisen.

Management Samenvatting

Custom models in Azure Document Intelligence maken het mogelijk om grote aantallen overheidsdocumenten betrouwbaar en herhaalbaar te ontsluiten, mits ze zorgvuldig zijn ontworpen, getraind, gemonitord en gedocumenteerd. Dit artikel beschrijft de volledige governance‑, kwaliteits- en compliance‑aanpak, inclusief geautomatiseerde checks en remediatie‑scripts.