# Archiveren

**Auteur**: Joeri Bekker | **Status**: In voorbereiding

## Inleiding

Om goed te archiveren is een goede informatiehuishouding noodzakelijk. De [Gemeentelijke Selectielijst](https://vng.nl/artikelen/selectielijst) biedt een belangrijke basis om te bepalen na hoeveel tijd archiefbescheiden (ofwel, procesgebonden informatie) moeten worden vernietigd danwel blijvend worden bewaard door overbrenging naar een e-depot. We limiteren in dit document de scope tot het **vernietigen** van **digitale** archiefbescheiden maar het proces om tot vernietigen te komen is gelijk aan die voor overbrengen / blijvend bewaren.

## Doel

Het doel is om zoveel mogelijk digitale archiefbescheiden geautomatiseerd te vernietigen in het ICT-landschap zoals Platform Dienstverlening en Common Ground dat voor ogen hebben.

Om dit doel te bereiken, moet opnieuw gekeken worden naar alle mogelijke scenario's die spelen bij het bepalen van de **archiefactiedatum**: De datum waarop informatie moet worden vernietigd. Maar ook moet gekeken worden naar welke gerelateerde informatie eventueel mee moet worden vernietigd.

### Uitgangspunten

1. De archiefwet is uitgedrukt in de selectielijst
2. Alle informatie moet op een efficiënte manier te vernietigen zijn volgens de archiefwet
3. Alle informatie moet impliciet of expliciet gekoppeld zijn aan de selectielijst
   1. gegevens die bij een ZAAK horen (het zaakdossier), hanteren de selectielijst via de ZAAK
   2. gegevens die niet bij een ZAAK horen, zijn op een andere wijze te koppelen aan de selectielijst
4. Alles wat onderdeel is van het zaakdossier moet via de ZAAK te relateren zijn (de relatie moet duidelijk zijn vanuit het ZAAK-perspectief)
5. Informatie die aan meer dan één ZAAK gerelateerd is, wordt pas vernietigd zodra de laatste relatie wordt vernietigd.
6. De scope betreft registers waar van gemeenten.
7. Het is de verantwoordelijkheid van het register om binnen het register gekoppelde informatie te vernietigen (cascading).

Aanvullend:

* Een VERZOEK leidt altijd tot een ZAAK (wat niet impliceert dat elke ZAAK start met een VERZOEK)
* Een PRODUCT (vaak een procesobject) volgt altijd uit een ZAAK (wat niet impliceert dat elke ZAAK leidt tot een PRODUCT)

## Bepalen wanneer te vernietigen

In veel gevallen staat een ZAAK centraal in het bepalen van de archiefactiedatum, vaak gecombineerd met het **procesobject**: Het object waar de uitvoering van het proces op van toepassing is (bijv. een financiële voorziening zoals een subsidie of schuldhulpverlening).

{% @mermaid/diagram content="---
title: Tijdlijn van een ZAAK
---
flowchart LR
    A[Startdatum] --doorlooptijd--> B[Einddatum]
    B --procestermijn--> C[Brondatum]
    C --bewaartermijn--> D[Archiefactiedatum]" fullWidth="false" %}

Het bepalen van de archiefactiedatum is echter niet altijd triviaal en er zijn veel verschillende scenario's die met name worden veroorzaakt door de **procestermijn**, die niet altijd van te voren bekend is (wanneer stopt bijv. de schuldhulpverlening, nadat schuldhulpverlening is toegewezen?). Zodra de procestermijn bekend is, is ook de **brondatum** bekend (= einddatum + procestermijn) en kan ook de archiefactiedatum berekent worden (= brondatum + bewaartermijn).  Brondatum wordt ook wel de **startdatum bewaartermijn** genoemd.

Hoe de ZAAK verloopt, wordt voorgeschreven door het gekoppelde ZAAKTYPE. Het ZAAKTYPE zelf is een specialisatie van een algemeen procestype uit de Selectielijst. Bijvoorbeeld: ZAAKTYPE "aanvraag gehandicaptenparkeervergunning" is een specifieke invulling van het procestype "voorzieningen verstrekken".

### De relatie tussen ZAKEN, ZAAKTYPEN en de Selectielijst

Elk ZAAKTYPE is gekoppeld aan een **procestype** uit de Selectielijst en geeft ook aan wat het (globale) procesobject is. Elk RESULTAATTYPE is gekoppeld aan een **resultaat** uit de Selectielijst en zo'n resultaat bepaald weer de procestermijn categorie en tevens de bewaartermijn.

{% @mermaid/diagram content="flowchart LR
    Q[ZAAK] --is van--> A
    A[ZAAKTYPE] --selectielijst--> B[Procestype]
    A --heeft (meerdere)--> C[RESULTAATTYPE]
    C --selectielijst--> D[Resultaat]" %}

#### Technisch

```bash
zaaktype.selectielijstProcestype = URL naar selectielijst.procestype # TODO
```

{% hint style="warning" %}
TODO: Het `selectielijstProcestype` is nu nog een URL. De wens is om dit te wijzigen naar het nummer (bijv. 8) het `procestype`.
{% endhint %}

### De relatie tussen RESULTAATTYPEN en de Selectielijst

Een RESULTTAATTYPE is gekoppeld aan een resultaat in de Selectielijst en bepaald uiteindelijk de archiefactiedatum.

**Technisch bij ZAAKTYPE**

```bash
zaaktype.resultaattype.selectielijstklasse = url naar selectielijst.resultaat # TODO
zaaktype.resultaattype.archiefnominatie = selectielijst.waardering # vernietigen of blijvend_bewaren
zaaktype.resultaattype.archiefactietermijn = selectielijst.bewaartermijn
```

{% hint style="warning" %}
TODO: De `selectielijstklasse` is nu nog een URL. De wens is om dit te wijzigen naar het nummer (bijv. 8.1) van het `resultaat`  met validatie dat het nummer begint met het proces nummer.
{% endhint %}

Zo'n resultaat in de Selectielijst bepaald de duur van de procestermijn. De duur van de procestermijn is ingedeeld in verschillende categorieën in de Selectielijst en moet verwerkt worden bij het RESULTAATTYPE. Voor elk van deze categorieën zijn specifieke acties nodig om op de juiste manier  de brondatum en daarmee de archiefactiedatum te berekenen. Bij zaaktypen zijn deze categorieën in te vullen middels de `brondatumArchiefprocedure` met speciale aandacht voor de `afleidingswijze brondatum` . Hieronder volgt de mapping:

| Selectielijst procestermijn categorie                                                                                                              | Toegestane afleidingswijzen bij het zaaktype                                                                                      |
| -------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- |
| <p>Nihil <br><code>nihil</code></p>                                                                                                                | `afgehandeld`                                                                                                                     |
| <p>De bestaans- of geldigheidsduur van het procesobject <br><code>bestaansduur_processobject</code></p>                                            | `ander_datumkenmerk`, `eigenschap`, `gerelateerde_zaak`, `hoofdzaak`, `ingangsdatum_besluit`, `vervaldatum_besluit`, `zaakobject` |
| <p>De ingeschatte maximale bestaans- of geldigheidsduur van het procesobject<br> <code>ingeschatte_bestaansduur_procesobject</code></p>            | `termijn`                                                                                                                         |
| <p>De tijdens het proces vast te leggen datum waarop de geldigheid van het procesobject komt te vervallen<br><code>vast_te_leggen_datum</code></p> | `ander_datumkenmerk`, `eigenschap`, `gerelateerde_zaak`, `hoofdzaak`, `ingangsdatum_besluit`, `vervaldatum_besluit`, `zaakobject` |
| <p>Procestermijn samengevoegd met bewaartermijn<br><code>samengevoegd_met_bewaartermijn</code></p>                                                 | `ander_datumkenmerk`, `eigenschap`, `gerelateerde_zaak`, `hoofdzaak`, `ingangsdatum_besluit`, `vervaldatum_besluit`, `zaakobject` |

{% hint style="warning" %}
TODO: afleidingswijze in de tabel beperken n.a.v. onderstaande.
{% endhint %}

Hieronder staat per categorie een uitgebreidere beschrijving van de mogelijke afleidingswijzen en hoe deze zich vertalen naar de technische werking.

#### 1. Nihil

Er is geen aparte procestermijn, de bewaartermijn start direct. Er is daarom slechts één afleidingswijze mogelijke om invulling te geven aan deze categorie en dat is de afleidingswijze `afgehandeld`.  Deze afleidingswijze kent geen verplichte attributen.

{% hint style="success" %}
Deze categorie en afleidingswijze wordt volledig ondersteund door het zaaksysteem zelf. Er zijn geen afhankelijkheden van externe componenten of menselijk handelen.
{% endhint %}

**Technisch bij ZAAKTYPE**

```bash
zaaktype.resultaattype.brondatumArchiefprocedure.afleidingswijze = "afgehandeld"
zaaktype.resultaattype.procesobjectaard   # TODO
zaaktype.resultaattype.indicatieSpecifiek # TODO
zaaktype.resultaattype.procestermijn      # TODO
```

**Technisch bij ZAAK**

Zodra de zaak is afgesloten (= zaak heeft een eindstatus bereikt), worden de volgende attributen gezet, door het zaaksysteem zelf:

```bash
zaak.brondatum = zaak.einddatum
zaak.archiefactiedatum = zaak.brondatum + zaak.resultaat.resultaattype.archiefactietermijn 
```

#### 2. De bestaans- of geldigheidsduur van het procesobject

De lengte van de procestermijn is afhankelijk van het procesobject. Nadat het procesobject haar geldigheid heeft verloren of niet meer bestaat, is de datum waarop dat gebeurt de brondatum en gaat de bewaartermijn lopen.

Er zijn voor deze categorie  3 afleidingswijzen mogelijk:

#### 2.1 Zaakobject

De afleidingswijze `zaakobject` verplicht de volgende `brondatumArchiefprocedure` attributen: `datumkenmerk` en `objecttype` . Het `datumkenmerk` representeert in dit geval het attribuut op het `objecttype`.

Als het procesobject gekoppeld is aan de zaak, bijvoorbeeld het PRODUCT in de Producten API, via een ZAAKOBJECT dan is de afleidingswijze `zaakobject` .

{% hint style="success" %}
Deze afleidingswijze is straks volledig geautomatiseerd in te zetten door de introductie van de componenten Objecten API en Producten API. Beiden zijn moderne registraties die geautomatiseerd te bevragen zijn. In combinatie met de Notificatie API kan de Zaken API acteren op wijzigen in de andere registraties.
{% endhint %}

**Technisch bij ZAAKTYPE**

Als voorbeeld gaan we er van uit dat er een PRODUCT is met daarin het attribuut `einddatum` dat de brondatum bepaald.

```bash
zaaktype.resultaattype.brondatumArchiefprocedure.afleidingswijze = "zaakobject"
zaaktype.resultaattype.brondatumArchiefprocedure.datumkenmerk = "einddatum"  # attribuut in procesobject
zaaktype.resultaattype.brondatumArchiefprocedure.objecttype = "PRODUCT"      # objecttype van de resource
zaaktype.resultaattype.procesobjectaard   # TODO
zaaktype.resultaattype.indicatieSpecifiek # TODO
zaaktype.resultaattype.procestermijn      # TODO
```

**Technisch bij ZAAK**

In theorie is de archiefactiedatum goed te bepalen:

```bash
zaak.brondatum = [Producten API] product.einddatum
zaak.archiefactiedatum = zaak.brondatum + zaak.resultaat.resultaattype.archiefactietermijn 
```

Echter, de einddatum van een PRODUCT is niet altijd bekend bij het afsluiten van de ZAAK.

{% hint style="warning" %}
TODO: Zodra er een einddatum bekend wordt op het product, moet een notificatie naar Open Zaak uitgaan om de brondatum te bepalen.

TODO: Of, in het geval van categorie 4 en 5 moet direct het gerelateerde object geraadpleegd worden. Wie doet dat?
{% endhint %}

#### 2.2 Ander datumkenmerk

De afleidingswijze `ander_datumkenmerk` verplicht de volgende `brondatumArchiefprocedure` attributen: `datumkenmerk`, `objecttype` en `registratie`.

{% hint style="danger" %}
Deze afleidingswijze is volledig gebaseerd op handmatig handelingen en een tekstuele uitleg in het toelichtingsveld bij het RESULTAATTYPE en is daarom niet verder uitgewerkt.
{% endhint %}

#### 2.3 Eigenschap

De afleidingswijze `eigenschap` verplicht de volgende `brondatumArchiefprocedure` attributen: `datumkenmerk` . Het `datumkenmerk` representeert in dit geval de ZAAK-EIGENSCHAP.

Als de ZAAK-EIGENSCHAP wordt ingevuld, wordt de `brondatum` bekend en de `archiefactiedatum` berekend.

{% hint style="success" %}
Deze afleidingswijze wordt volledig ondersteund door het zaaksysteem zelf, maar "iets of iemand" zal de eigenschap moeten vullen.
{% endhint %}

**Technisch bij ZAAKTYPE**

Als voorbeeld is er nu een ZAAK-EIGENSCHAP met de naam "productEinddatum".

```bash
zaaktype.resultaattype.brondatumArchiefprocedure.afleidingswijze = "eigenschap"
zaaktype.resultaattype.brondatumArchiefprocedure.datumkenmerk = "productEinddatum"  # de ZAAK-EIGENSCHAP, zijnde een datum
zaaktype.resultaattype.procesobjectaard   # TODO
zaaktype.resultaattype.indicatieSpecifiek # TODO
zaaktype.resultaattype.procestermijn      # TODO
```

**Technisch bij ZAAK**

Zodra de ZAAK-EIGENSCHAP met de naam "productEinddatum" ingevuld wordt, wordt deze gebruikt als brondatum.

```bash
zaak.brondatum = zaak.eigenschappen[productEinddatum]
zaak.archiefactiedatum = zaak.brondatum + zaak.resultaat.resultaattype.archiefactietermijn 
```

#### 3. De ingeschatte maximale bestaans- of geldigheidsduur van het procesobject

Er wordt een inschatting gemaakt van de maximale bestaans- of geldigheidsduur van het procesobject, ongeacht de daadwerkelijke duur. Dit kan bijvoorbeeld al vastgelegd worden in het zaaktype, zodat proces- en bewaartermijn samen een bewaartermijn vormen die gaat lopen vanaf het moment van afsluiten van de zaak.

De categorie`ingeschatte_bestaansduur_procesobject` verplicht de volgende `brondatumArchiefprocedure` attributen: `termijn`

{% hint style="success" %}
Deze categorie en afleidingswijze wordt volledig ondersteund door het zaaksysteem zelf. Er zijn geen afhankelijkheden van externe componenten of menselijk handelen.
{% endhint %}

**Technisch bij ZAAKTYPE**

Als voorbeeld is termijn gezet op 1 jaar (technisch: P1Y).

```bash
zaaktype.resultaattype.brondatumArchiefprocedure.afleidingswijze = "termijn"
zaaktype.resultaattype.brondatumArchiefprocedure.termijn = "P1Y"
zaaktype.resultaattype.procesobjectaard   # TODO
zaaktype.resultaattype.indicatieSpecifiek # TODO
zaaktype.resultaattype.procestermijn      # TODO
```

**Technisch bij ZAAK**

Zodra de zaak is afgesloten (= zaak heeft een eindstatus bereikt) wordt de termijn opgeteld bij deze datum, en vormt zo de brondatum.

```bash
zaak.brondatum = zaak.einddatum + zaak.zaaktype.resultaattype.brondatumArchiefprocedure.termijn
zaak.archiefactiedatum = zaak.brondatum + zaak.resultaat.resultaattype.archiefactietermijn 
```

#### 4. De tijdens het proces vast te leggen datum waarop de geldigheid van het procesobject komt te vervallen

Tijdens de procesuitvoering wordt de datum bepaald wanneer het procesobject haar geldigheid zal verliezen. Tot dat moment loopt de procestermijn.

De categorie `vast_te_leggen_datum`  kent dezelfde afleidingswijzen als nummer 2 (De bestaans- of geldigheidsduur van het procesobject) met als enige verschil dat voordat de zaak wordt afgesloten, de brondatum bekend moet zijn geworden. Eerder mag de zaak niet afgesloten worden.

{% hint style="warning" %}
Deze categorie kan afhankelijk zijn van objecten buiten het zaaksysteem.
{% endhint %}

#### 5. Procestermijn samengevoegd met bewaartermijn

De proces- en bewaartermijn zijn samengevoegd als totaalwaarde bij de bewaartermijn. De datum waarop deze termijn moet gaan lopen is benoemd in de toelichting bij de categorie en kan in het verleden liggen.

De categorie `samengevoegd_met_bewaartermijn` kent dezelfde afleidingswijzen als nummer 2 (De bestaans- of geldigheidsduur van het procesobject) met als enige verschil dat het voordat de zaak wordt afgesloten, de brondatum bekend moet zijn geworden. Eerder mag de zaak niet afgesloten worden.

Op 1 uitzondering na gaat het in alle gevallen om de geboortedatum van een persoon als brondatum. Deze datum ligt dus typisch voor de einddatum van de zaak en kan bijvoorbeeld via een ZAAKOBJECT aan een PERSOON gekoppeld worden, of de geboortedatum kan als ZAAK-EIGENSCHAP worden opgenomen.

{% hint style="warning" %}
Deze categorie kan afhankelijk zijn van objecten buiten het zaaksysteem.
{% endhint %}

**Technisch bij ZAAK**

Zodra de zaak is afgesloten (= zaak heeft een eindstatus bereikt) wordt de termijn opgeteld bij deze datum, en vormt zo de brondatum.

```bash
zaak.brondatum = zaak.einddatum + zaak.zaaktype.resultaattype.brondatumArchiefprocedure.termijn
zaak.archiefactiedatum = zaak.brondatum + zaak.resultaat.resultaattype.archiefactietermijn 
```

### Voorbeeld

Als voorbeeld nemen "Aanvraag gehandicaptenparkeerkaart". Hieronder staat hoe de Selectielijst is gekoppeld aan het ZAAKTYPE en de bijbehorende RESULTAATTYPEN.

{% @mermaid/diagram content="flowchart LR
    A[ZAAKTYPE: 
'Aanvraag gehandicaptenparkeerkaart'] --selectielijst--> B[Procestype 8:
'Voorzieningen verstrekken']
    A --heeft--> C[RESULTAATTYPE: 'Toegekend']
    C --selectielijst--> D[Resultaat 8.1.14: 'Verstrekt']
    A --heeft--> E[RESULTAATTYPE: 'Afgewezen']
    E --selectielijst--> F[Resultaat 8.2: 'Geweigerd']
    A --heeft--> G[RESULTAATTYPE: 'Beëindigd']
    G --selectielijst--> H[Resultaat 8.3: 'Beëindigd']
    A --heeft--> I[RESULTAATTYPE: 'Afgebroken']
    I --selectielijst--> J[Resultaat 8.4: 'Afgebroken']" %}

Er zijn een paar bijzonderheden aan dit procestype:

* Het RESULTAATTYPE "Toegekend" is niet gekoppeld aan het generieke resultaat (8.1) dat voor de meeste voorzieningen van toepassing is. Het RESULTAATTYPE is aan een specifiek resultaat (8.1.14) gekoppeld in de Selectielijst. Dat komt omdat een gehandicaptenparkeerkaart een verbijzondering is van het algemeen procestype "Voorzieningen verstrekken".
* Resultaat 8.1.14 in de Selectielijst heeft als procestermijn categorie 2: "De bestaans- of geldigheidsduur van het procesobject". Dat betekent dat de procestermijn afhankelijk is van het product, de gehandicaptenparkeerkaart.

| Resultaattype | Resultaat        | Waardering  | Procestermijn                                                    | Bewaartermijn |
| ------------- | ---------------- | ----------- | ---------------------------------------------------------------- | ------------- |
| Toegekend     | 8.1.14 Verstrekt | Vernietigen | <p>De bestaans- of geldigheids<br>duur van het procesobject</p> | 1 jaar        |
| Afgewezen     | 8.2 Geweigerd    | Vernietigen | Nihil                                                            | 5 jaar        |
| Beëindigd     | 8.3 Beëindigd    | Vernietigen | Nihil                                                            | 10 jaar       |
| Afgebroken    | 8.4 Afgebroken   | Vernietigen | Nihil                                                            | 1 jaar        |



## Bepalen wat te vernietigen

Niet alle informatie is even sterk verbonden aan een ZAAK of zelfs helemaal niet verbonden aan een ZAAK. We onderscheiden 4 soorten informatie:

* Het vernietigen van directe zaak-informatie (zaken, informatieobjecten en besluiten)
* Zaak-objecten: Zaak-gerelateerde informatie die een integraal onderdeel vormt van de ZAAK (klantcontacten, zaakdetails, producten, etc.)
* Zaak-gerelateerde informatie die geen integraal onderdeel vormt van de ZAAK (personen, geo-objecten, etc.)
* Niet-zaak-gerelateerde informatie

Er is nog een as van soorten:

* Informatie die technisch direct te vernietigen is (denk aan registers waar Open Archiefbeheer direct bij kan, zoals in Open Product, Open Klant, etc.)
* Informatie die "buitenom" te vernietigen is (denk aan ouderwetse zaaksystemen, taak specifieke applicaties, een "Excel" of fysieke archiefmap, etc).







