Van bestaand naar betrouwbaar register: kern van de verandering
De dienstverlenings- en uitvoeringsprocessen van de overheid zijn heel divers. Maar wie door de oogharen kijkt naar processen die leiden tot het opnemen van gegevens in een register, ziet steeds dezelfde handelingspatroon terug: informatie wordt ingewonnen, verwerkt, geregistreerd, beschikbaar gesteld en eventueel opnieuw ingewonnen. Die structuur gebruiken we om te laten zien welke veranderingen een betrouwbaar register ten opzichte van de huidige situatie met zich meebrengt.
Een gemeenschappelijk handelingspatroon
Om deze veranderingen te kunnen duiden, moeten we eerst de binnen het handelingspatroon voorkomende activiteiten nader beschrijven.
Inwinnen is het gericht verzamelen van informatie. Inwinnen begint met een aanleiding van buiten of binnen de organisatie, zoals een aanvraag of een melding. Daarna wordt verzameld wat nodig is om die aanleiding te kunnen beoordelen.
Verwerken is het beoordelen van ingewonnen informatie en bepalen wat daaruit volgt. Daarbij wordt de ingewonnen informatie gewogen tegen wat al bekend is en tegen beleid, normen en wetten.
Registreren is het vastleggen van informatie die tijdens verwerking ontstaat, als basis voor vervolghandelingen. Dit is bijvoorbeeld een (representatie van) een recht, een besluit of een vastgestelde situatie.
Beschikbaar stellen is het toegankelijk maken van geregistreerde informatie voor anderen. Wie die anderen zijn en in welke vorm de informatie nodig is, verschilt: een besluit voor een aanvrager, een notificatie voor een ketenpartner, een antwoord op een bevraging.
Het handelingspatroon is een kringloop. Wat de ene organisatie beschikbaar stelt, is voor een andere organisatie aanleiding om in te winnen, of voor dezelfde organisatie bij een volgende taak. Zo ontstaan ketens van overheidshandelen.
Van bestaand naar betrouwbaar register
We starten bij een register zoals dat nu vaak is ingericht. Daarna laten we voor de activiteiten verwerken, registreren en beschikbaar stellen zien welke verandering een betrouwbaar register met zich meebrengt. Inwinnen ligt in alle gevallen buiten het register en wordt (hier) daarom niet besproken.
Hoe een bestaand register naar een betrouwbaar register kan groeien, beschrijven we in [nog op te nemen].
Elke figuur toont de vier activiteiten en de grens van het register. De figuren tonen qua elementen alleen de hoofdlijn: welke dataobjecten worden gecreëerd, gelezen en welke (applicatie)functies daarvoor verantwoordelijk zijn. Wat daaronder ligt beschrijven we verderop in detail in de hoofdstukken over registerontwerp.
Het bestaande register
Inwinnen en het behandelen van een externe bevinding, bijvoorbeeld de ontvangst van een verzoek en behandeling daarvan in een zaaksysteem, liggen buiten het register. Wat het register naar aanleiding van de zaakbehandeling wel bereikt zijn mutaties: opdrachten om vastleggingen toe te voegen, te wijzigen of te verwijderen, gesteld in termen van de opslagstructuur.
Die structuur is terug te zien in het CRUD-karakter van veel API's, die het mogelijk maken create, read, update en delete-handelingen op tabelregels uit te voeren. Een mutatie met zo'n API beschrijft wel welke waarden veranderen, maar niet welke handeling binnen de bounded context daartoe aanleiding gaf. Die kennis zit in de systemen die het register aanroepen.
Een mutatie markeert de grens tussen verwerken buiten en binnen het register. De functie Muteren voert die opdracht uit, en het resultaat is een vastlegging: een door het register opgeslagen samenhangende verzameling waarden. Verstrekkingen komen rechtstreeks uit die vastleggingen. Het register omvat zo het registreren, en van het verwerken en het beschikbaar stellen het deel tussen de mutatie en de verstrekking. De verstrekking zelf verlaat het register.
Verwerken en registeren: een commando drukt een handeling uit
In een betrouwbaar register bereikt het resultaat van de verwerking het register als commando. Een commando drukt een handeling in het domein uit, zoals 'registreer een geboorte' of 'corrigeer een adres', in de gemeenschappelijke taal van de bounded context. Het commando draagt daarmee de bedoeling van wie het aanbiedt.
Die bedoeling blijft in het register behouden. De functie Optekenen toetst het commando en legt het resultaat vast als bewering. Waar een vastlegging alleen waarden bevat, heeft een bewering (tenminste) ook een herkomst en een datering. Daardoor is na te gaan wat er vóór registratie van een bewering in de bounded context gebeurde, en wanneer en waarom.
Registreren en beschikbaar stellen: primaire en afgeleide beweringen
Een commando maakt zichtbaar welke aanleiding er was om iets te doen, maar vertelt niet hoe het register die heeft verwerkt. Bij het optekenen wordt het commando getoetst aan informatie die het register al bevat en om te bepalen wat als resultaat daarvan binnen de bounded context moet veranderen. Om te begrijpen waarom informatie in het register staat, zijn aanleiding en de resultaat allebei nodig.
Een betrouwbaar register legt het resultaat van de verwerking daarom vast in zelfstandige primaire beweringen. Ook als die uitkomst weinig van het commando lijkt te verschillen, is de primaire bewering betekenisvol: die bewijst dat het commando is aanvaard, waardoor een administratieve situatie tot stand kwam, of veranderde. Primaire beweringen worden bijgeschreven in een journaal, waarin niets wordt gewijzigd.
Voor gebruik door afnemers zijn primaire beweringen minder geschikt. Zij zijn meestal niet geïnteresseerd in wat veranderde, maar hoe iets op een bepaald moment was - dus een toestand, opgebouwd uit een verzameling gegevens die bij hun eigen taken past. Daarom leidt de functie Projecteren uit het journaal afgeleide beweringen af, aansluitend bij de informatiebehoeften van specifieke (groepen van) afnemers. Bijhouden en beschikbaar stellen krijgen zo elk een eigen structuur, volgens het Command Query Responsibility Segregation(CQRS)-patroon.
Beschikbaar stellen: betrouwbare verstrekkingen
Op basis van primaire en afgeleide beweringen is de handelingsketen binnen het register terug te volgen: van een afgeleide bewering naar de primaire beweringen waarop die berust, en van daar naar de commando's en externe bevindingen waaruit die voortkwamen. Bij verstrekking houdt dat spoor op.
Een afnemer handelt op basis van wat het register verstrekte. Wordt dat handelen later betwist, dan moet de afnemer niet alleen kunnen laten zien welke informatie voor het eigen handelen de basis vormde, maar ook dat die informatie werkelijk door het register verstrekt werd. In een betrouwbaar register kunnen daarom ook verstrekkingen binnen de registergrenzen geplaatst worden. Zo wordt geïllustreerd dat het register kan bevestigen dat het een verstrekking met een bepaalde inhoud heeft gedaan, en die zo nodig opnieuw kan leveren.
Relatie met onderdelen van het registerontwerp
De onderdelen van het registerontwerp sluiten aan bij de activiteiten van het handelingspatroon:
- Bounded contextmodel beschrijft wat het register binnen zijn context kan beweren. Dat geldt voor alle activiteiten.
- Commando's gaat over verwerken: hoe een externe bevinding een commando wordt.
- Gevolgen gaat over registreren: hoe het register primaire beweringen optekent in het journaal.
- Projecties en Verstrekken gaan over beschikbaar stellen: hoe het register afgeleide beweringen afleidt en verstrekt.
- Betwisten gaat over wat er gebeurt als een verstrekt gegeven vermoedelijk onjuist is. Dat loopt van beschikbaar stellen terug naar inwinnen: de uitkomst van het onderzoek naar een terugmelding komt als externe bevinding weer binnen.
- Vernietigen gaat over registreren en beschikbaar stellen: hoe het register beweringen blijvend ontoegankelijk maakt als die niet langer beschikbaar mogen zijn.