# Formulier (Verzoek) prefill

**Auteur**: Jan Verbeek en Jan Brekelmans | **Status**: Concept

## Omschrijving

De wens is om een formulier in open formulieren (OF) te kunnen starten met vooraf ingevulde data. Een voorbeeld hiervan is het starten van een actie op een product (verzoek tot wijziging, afkoop erfpacht, heraanvraag/verlenging).

Momenteel is het alleen mogelijk om OF data live op te laten halen via een OF plugin / service.

Op deze pagina beschrijven we het patroon om data voor het starten van het formulier vast te leggen en die bij de start van het formulier in te laden.

Voor de prefill mechaniek is er gekozen om het formuliercontract te gaan gebruiken. De definitie en mapping bestaat al (van formulier naar contract) maar zal voor deze oplossing bi-directioneel moeten worden.

Let op; Afgeleide data kan niet worden geprefilled omdat dit niet kan worden terug berekend (Bijv. een afgeleid veld ‘ouder dan 18’ kan niet worden terug herleid naar het invoerveld ‘leeftijd’)

## Sequence

{% @mermaid/diagram content="sequenceDiagram
actor klant AS Klant
participant portaal AS Portaal
participant object AS Objecten API
participant of AS OpenFormulieren
participant on AS OpenNotificaties
participant zac AS ZAC

klant ->>+ portaal: Selecteert formulier actie<br/>(Bijv. op product)
portaal ->>+ object: Zet formuliercontract klaar<br/>Incl. prefil data
object ->>+ on: Systeemnotificatie
deactivate object
on --x zac: (TODO)Geen trigger<br/>Wordt via abbonement gefilterd
deactivate on
portaal ->> portaal: Genereert hash van gevuld formuliercontract
portaal -->> klant: Forward naar OpenFormulieren formulier<br/>Met object UUID + hash
deactivate portaal
klant ->>+ of: Start formulier<br/>met object UUID + hash
of ->>+ object: Ophalen formuliercontract<br/>dmv UUID
object -->> of: Formuliercontract
deactivate object
of ->> of: Bereken formuliercontract hash<br/>En valideer met meegegeven hash
break Validatie error
of -->> klant: Geef error terug. Formulier laad niet
end
of ->>+ klant: Weergeven formulier incl prefil data
klant ->> klant: Vult rest van formulier in<br/>(Prefil data mag overschreven worden)

klant ->> of: Stuur formulier op
deactivate klant
of -->> klant: Klaar
of ->>+ object: Update formuliercontract<br/>(Hash is niet meer geldig)

deactivate of
object ->>+ on: Systeemnotificatie
deactivate object
on ->>+ zac: Trigger
deactivate on
zac ->> zac: Verdere verwerking<br/>volgens bestaand patroon
zac ->> object: Verwijder formuliercontract
deactivate zac" %}

* Eerste trigger naar ZAC zal genegeerd moeten worden
  * ZAC luistert natuurlijk naar het formulier contract (/verzoek) objectType, maar moet nog geen actie ondernemen in de eerste stap
  * Bij voorkeur wordt dit al bij de notificatie service er uit gefilterd
* Hash is een … (MD5?) hash van het gehele object
  * Dit betekent dat de geldigheid van de hash tot verandering (dus tot update) van het object geldig is aangezien dan het object en dus de hash veranderd


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://dienstverleningsplatform.gitbook.io/platform-generieke-dienstverlening-public/best-practices/formulier-verzoek-prefill.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
