Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Business rules ZTC-010 en ZTC-011 maken het vrijwel onmogelijk concept zaaktypes te wijzigen en nieuwe versies van zaaktypes te maken #1838

Closed
johannesbattjes opened this issue Jun 3, 2021 · 27 comments

Comments

@johannesbattjes
Copy link

Volgens business rules ZTC-010 en ZTC-011 is het volgende niet mogelijk:
• Een gepubliceerd Besluittype relateren aan een concept Zaaktype;
• Een concept Zaaktype bewerken als er een relatie is met een gepubliceerd Besluittype of gepubliceerd Informatieobjecttype.

Waarom is dit een groot probleem?
Als we in onze ZTC-beheertool een nieuwe versie van een zaaktype willen maken, willen we het oude Zaaktype kopiëren inclusief relaties naar (reeds gepubliceerde) besluittypes en informatieobjecttypes. Maar door ZTC-011 kunnen de bestaande besluittypen niet aan het nieuwe concept zaaktype gekoppeld worden. En door ZTC-010 kan dit nieuwe concept-Zaaktype niet meer bewerkt worden. Een nieuwe versie kan dus niet gemaakt worden.
Hetzelfde probleem speelt ook als je een geheel nieuw zaaktype zou willen maken op basis van gepubliceerde besluittypes en informatieobjecttypes.

Het is (volgens het informatiemodel) wel de bedoeling dat een Besluittype en Informatieobjecttype aan meerdere zaaktypes gerelateerd kunnen zijn. Maar de business rules ZTC-010 en ZTC-011 maken het vrijwel onmogelijk dat in de ZTC-beheertool te realiseren. Bij Informatieobjecttypes is het in theorie mogelijk reeds gepubliceerde informatieobjecttypes op het allerlaatst toe te voegen vlak voor het publiceren van het zaaktype, maar dat is onwerkbaar. Bij besluittypes is dit in het geheel niet mogelijk.

Voorstel: verwijder ZTC-010 en ZTC-011 uit de standaard.

@michielverhoef
Copy link
Collaborator

Als we in onze ZTC-beheertool een nieuwe versie van een zaaktype willen maken, willen we het oude Zaaktype kopiëren inclusief relaties naar (reeds gepubliceerde) besluittypes en informatieobjecttypes.

Deze beschreven werkwijze is niet correct en niet zoals de Catalogi API bedoeld is.

Een Zaaktype is in feite een geheel van Zaaktype en gerelateerde typen zoals Roltypen, Besluittypen, Informatieobjecttypen, Statustypen, Resultaattypen, zaaktype-informatieobjecttypen.

De status van de gerelateerde typen is afhankelijk van de status van het Zaaktype. Is het Zaaktype niet meer concept zijn ook de gerelateerd typen niet meer in concept.

Het is dus niet toegestaan een nieuw Zaaktype te maken en hier bestaande gerelateerde typen aan te koppelen. Dit is technisch ook niet te doen, immers, ni een gerelateerd type wordt verwezen naar 1 zaaktype. wanneer deze verwijzing zou veranderen hou je een zaaktype over wat niet meer compleet is: Een deel van de gerelateerde typen is gekoppeld aan een ander Zaaktype en het is niet meer mogelijk om het oude Zaaktype in zijn geheel op te vragen.

De oplossing hiervoor is bij het maken van de kopie van het oude Zaaktype ook de bestaande gerelateerde typen te kopieren en deze aan de kopie van het Zaaktype te koppelen.

@johannesbattjes
Copy link
Author

"Een Zaaktype is in feite een geheel van Zaaktype en gerelateerde typen zoals Roltypen, Besluittypen, Informatieobjecttypen, Statustypen, Resultaattypen, zaaktype-informatieobjecttypen."
Is dit zo? In het informatiemodel is er een veel-op-veel relatie tussen zaaktype en informatie-objecttype. Dit betekent dat informatieobjecttypes aan meerdere (versies van) zaaktypes gerelateerd kunnen zijn.
is het informatiemodel dan fout?
Daarnaast heb ik een vrager over "het is technisch niet te doen". Wij hebben dit inmiddels geimplementeerd en ik heb geen klachten gehoord van het ontwikkelteam. Op basis van welke ervaring beweer je dit?

@michielverhoef
Copy link
Collaborator

michielverhoef commented Jul 2, 2021

Edit: Nadat ik het geval nog eens bekeken had en uitgewerkt had in een uitleg kwam ik tot de conclusie dat mijn eerdere idee over een backwards incompatible wijziging niet klopte.

Eigenlijk is het heel simpel:

De relaties tussen Zaaktype en bijvoorbeeld Rtatustype, Roltype, Eigenschap etc zijn 1 op n. Zie ook de diagrammen op deze pagina's:
https://www.gemmaonline.nl/index.php/Imztc_2.2/doc/objecttype/roltype
https://www.gemmaonline.nl/index.php/Imztc_2.2/doc/objecttype/statustype
https://www.gemmaonline.nl/index.php/Imztc_2.2/doc/objecttype/eigenschap

De relatie tussen zaaktype en informatieobjecttype is wel n op n. Die relatie wordt in de API via de relatieklasse ZaaktypeInformatieobjecttype gelegd. Bij het aanmaken (POST), bijwerken (PUT, PATCH) is het niet mogelijk urls naar relevante Informatieobjecttypen mee te geven. Die urls komen wel terug in het antwoord maar dat is puur voor het gemak. Zo kun je in één keer zien welke Informatieobjecttypen relevant zijn voor welk Zaaktype en andersom. Volgens mij moet het met de relatieklasse ZaaktypeInformatieobjecttype mogelijk zijn om een Informatieobjecttype te relateren aan meer dan één (versie van een) Zaaktype.

@MNIJ
Copy link

MNIJ commented Jul 6, 2021

Volgens mij moet het met de relatieklasse ZaaktypeInformatieobjecttype mogelijk zijn om een Informatieobjecttype te relateren aan meer dan één (versie van een) Zaaktype.

Ja, dat is ook mogelijk, je kan die relatie leggen zo lang minimaal één van de twee (ZT of IOT) nog in concept is. Dat is de uitzondering die geformuleerd is in ZTC-010 "Voor ZaakType-InformatieObjectType gelden bovenstaande regels (ztc-010) alleen in het geval waarbij zowel het ZaakType als het InformatieObjectType concept=False hebben".
Voor Besluittype bestaat die uitzondering niet, het is dus alleen mogelijk een relatie te leggen tussen een ZT en een BT als beide concept zijn. Hierdoor is het niet mogelijk om een Besluittype dat al in gebruik is bij een gepubliceerd ZT, ook te gebruiken bij een nieuw concept ZT. Ongeacht of dat nieuwe ZT een geheel nieuw ZT is of een nieuwe versie van een bestaand ZT. Dat is het probleem met ZTC-010.

Dan het probleem met ZTC-011. Als je een nieuw ZT maakt is dat uiteraard nog concept. Zodra je daar een gepubliceerd IOT aan koppelt, zegt ZTC-011 dat je het concept ZT niet meer mag aanpassen omdat het een relatie heeft naar een gepubliceerd object. Dat is ontzettend onpraktisch, want dat betekent dat je wijzigingen aan het concept ZT in een precieze volgorde moet doen.

Doordat ZTC-012 nog steeds afdwingt dat je een ZT niet mag publiceren zolang er relaties zijn met concept objecten, levert het schrappen van ZTC-010 en ZTC-011 helemaal geen probleem op. Die regel dwingt immers af dat bij gepubliceerde zaaktypen alle relaties correct zijn naar gepubliceerde IOT's en BT's, waardoor het schrappen van ZTC-010 en ZTC-011 alleen impact heeft op concept Zaaktypen.

@michielverhoef
Copy link
Collaborator

Wat het lastig maakt is dat de n op n relatie tussen Zaaktypen en Informatieobjecttypen gelegd wordt met een relatieklasse. De relatie tussen Besluittypen en Zaaktypen wordt rechtstreeks gelegd, in het objecttype zelf. Tot op zekere hoogte is dat logisch omdat de relatieklasse extra metainformatie bevat over die relatieklasse. De relatie tussen Besluittypen en Zaaktypen heeft dat niet, daarom is er geen relatieklasse.

Een oplossing kan zijn al de n-op-n relaties te leggen via een relatieklasse (koppeltabel eigenlijk). Dat is geen afwijking van het ImZTC, het is een technische invulling voor het leggen van een relatie zoals die is beschreven in het Semantische Informatiemodel. Dit zou dan ook gelden voor bijvoorbeeld ProductenOfDiensten.

Nu ik er zo over nadenk is een deel van het probleem dat er geen 1-op-1 of 1-op-n relaties bestaan. Zodra een nieuwe versie van een Zaaktype aan een bestaand objecttype gekoppeld wordt is er al sprake van een 1-op-n (n-op-1) relatie. Ik verwacht eigenlijk dat op de achtergrond een implementatie al zoiets zal doen via een koppeltabel of iets dergelijks.

Bij het opvragen van objecttypen kunnen de relaties wel in het antwoord opgenomen worden. Dus zoals nu ook al gebeurt.

Het voordeel van het gebruik van aparte resources om (alle) relaties te leggen is dat ZTC-009 en ZTC-010 gaan werken zoals nu voor ZaaktypeInformatieobjecttype beschreven staat. Los van het voordeel dat het leggen van relaties dan altijd op dezelfde manier werkt.

Wel moet er dan een betere invulling van ZTC-011 komen. Het moet minder ingewikkeld worden om een Zaaktype in te richten. Iets als dat het mogelijk is om nieuwe relaties via een relatieklasse te leggen wanneer het Zaaktype nog niet gepubliceerd is. In dit geval loopt de relatie van "Zaaktype heeftRelevant Informatieobjecttype". Zaaktype mag dan niet concept=false zijn, de Informatieobjecttypen wel. Er verandert immers niet aan het Informatieobjecttype.

Het vervelende van de huidige ZTC regels is dat niet gekeken wordt naar de richting van de relatie. Bij het leggen van de relatie moet gekeken worden naar de conceptstatus van het objecttype van waaruit de relatie gelegd wordt. Die status mag niet zijn concept=false. Maar een nieuw objecttype mag best verwijzen naar een al bestaand objecttype. Zolang dat bestaande objecttype niet veranderd hoeft te worden. Dat laatste hoeft niet wanneer de relaties gelegd worden vanuit de relatieklasse in plaats van in een attribuut in het objecttype zelf.

@HenriKorver Wat vind jij?

@michielverhoef michielverhoef reopened this Jul 6, 2021
@MNIJ
Copy link

MNIJ commented Jul 7, 2021

Op zich niet slecht om de relaties tussen opzichzelfstaande entiteiten zoals Zaaktypen, Besluittypen en Informatieobjecttypen altijd via een relatie-object te leggen, zoals nu al bij de ZT-IOT relatie. Om het helemaal consequent te maken, zou dat dan in mijn ogen ook moeten gelden voor ZT-ZT relaties (voor mogelijke deelzaaktypen of gerelateerde zaaktypen). Want volgens een strikte interpretatie van business rule ZTC-010 zou die business rule ook gelden voor deze ZT-ZT relaties, ook al is er zo ver ik weet geen enkele ZGW implementatie die dat zo doet, Open Zaak en de VNG Referentie-implementatie in ieder geval niet.

Het maakt echter de standaard wel weer complexer, met nog meer entiteiten.

Maar het is binnen de huidige standaard wel gewoon mogelijk om een implementatie te maken die business rules ZTC-010 en ZTC-011 negeert, zonder enige consequentie voor de rest van de werking. Als wij in onze ZGW implementatie het volgen van ZTC-010 en ZTC-011 uitzetten (daar hebben we een instelling voor gemaakt), dan voldoet het verder nog aan alle andere business rules, ook volgens het Postman referentie-testproject. Wij zien hier ook functioneel geen negatieve gevolgen aan. Wel positieve, omdat dit het mogelijk maakt om de ZTC op te bouwen conform de geest van het het informatiemodel. Belangrijk daarvoor is dan wel dat ZTC-012 gehandhaafd blijft.

Er zijn overigens ook heel andere routes om ditzelfde probleem op te lossen. De oplossingen besproken voor ZT-ZT relaties in item 1851 zouden dit probleem ook voor de ZT-IOT en ZT-BT relaties kunnen oplossen. Dus ofwel relaties leggen op een versie-onafhankelijke code i.p.v. URI ofwel het objecttype-objecttypeversie datamodel adopteren, zoals voorgesteld door @MarcoKlerks in dat issue. Dat laatste is uiteraard wel een nog veel ingrijpendere aanpassing.

@michielverhoef michielverhoef self-assigned this Jul 21, 2021
@michielverhoef michielverhoef added this to the Catalogi API 1.2.0 milestone Jul 21, 2021
@michielverhoef
Copy link
Collaborator

Ik ben nu bezig met dit puzzeltje en wil dit graag bij de eerstkomende bijeenkomst van de technische gebruikersgroep (uitnodiging volgt) bespreken.

Ook kijkende naar #1656 en #1851 neig ik er naar om de relaties tussen typen met een identificatie te leggen in plaats van een absolute url naar een specifieke versie van een type. Dit maakt het wel noodzakelijk dat er logica geimplementeerd wordt om de correcte versie (tijdvakgeldigheid) van een type op te halen maar heeft als voordeel dat bij een wijziging van een type niet bij wijze van spreken de hele catalogus opnieuw hoeft te worden gedefinieerd.

Het maakt het ook een stuk eenvoudiger om bijvoorbeeld een nieuwe versie van een zaaktype te maken en die naar ongewijzigde versies van besluittype, informatieobjecttype etc. te laten verwijzen.

Het enige echte nadeel is: Dit is volgens mij een breaking change ten opzichte van het verwijzen met urls. Dat zou betekenen dat er een niuewe major versie, Catalogi API 2.0, uitgebracht moet worden. Hoewel ik dat liever zo min mogelijk doe zou ik een verbetering die heel veel praktische problemen oplost het liefst zo snel mogelijk uitbrengen om onnodig werk aan het implementeren van Catalogi API versie 1.x te voorkomen.

Mocht ik me vergissen en is het verwijzen via een identificatie ipv een url wel backwards compatible dan kan dit natuurlijk in de volgende minor versie, Catalogi API 1.2, opgelost worden.

@johannesbattjes
Copy link
Author

Hallo Michiel, fijn dat dit wordt opgepakt!
Jouw oplossing voor een 2.0 versie lijkt ons goed.
Daarbij zou het loslaten van regels ZTC-10 en 11 wel kunnen binnen 1.x (omdat het backwards compatibel is).
Maar als versie 2.0 snel geleverd kan worden heeft de versie 2.0 met jouw oplossing (relateren op basis van identificatie) de voorkeur.

@michielverhoef
Copy link
Collaborator

Omdat ik toch goed wilde begrijpen waarom de Catalogi API zo anders werkt als voor ogen is in het ImZTC en wat ook naar voren komt in dit issue ben ik nog maar eens dingen op een rijtje gaan zetten. Ook ter voorbereiding voor de technische gebruikersgroep.

Het zou mooi zijn wanneer in ieder geval @ArjanKloosterboer , @hdksi, @Hugo-ter-Doest , @MNIJ en @johannesbattjes dit eens goed door willen lezen en eventuele denkfouten er uit willen halen. Maar iedereen is welkom te reageren, laat dit svp. duidelijk zijn.

Achterliggende reden waarom het probleem optreedt is het volgende:
Objecttypen hebben in ImZTC 2.2 hun eigen begin-/eind geldigheid. Dit is in de Catalogi API platgeslagen naar begin-/eind geldigheid van het Zaaktype. In de API is begin-/eind geldigheid van het Zaaktype dus bepalend voor alle gerelateerde objecttypen. In de API wordt dus niet zozeer een Zaaktype met gerelateerde objecttypen maar een versie van een Zaaktype met gerelateerde objecttypen gedefinieerd.

Daarmee is het noodzakelijk om bij een nieuwe versie van een zaaktype ook nieuwe versies van alle gerelateerde objecttypen te maken. Uitzonderingen zijn Besluittypen en Informatieobjecttypen. Deze kennen wel een begin-/eind geldigheid. Door het Zaaktype-Informatieobjecttype is het mogelijk bestaande Informatieobjecttypen concept=false te koppelen aan nieuwe Zaaktypen, voor Besluittypen geldt dit echter niet omdat die relatie rechtstreeks wordt gelegd.

Er zijn verschillende manieren om dit probleem op te lossen.

  1. Niets aanpassen in de standaard en bij een wijziging aan een objecttype het gehele zaaktype inclusief gerelateerde objecttypen opnieuw aanmaken.
  2. De standaard aanpassen en mogelijk maken dat objecttypen aan meer dan één versie van een ander objecttype gerelateerd zijn.

Voor die laatste wijze is het volgende nodig:

  • Toevoegen van een identificatie attribuut aan elk objecttype. Dit is geen uniek gegeven, elke versie van het objecttype heeft hetzelfde identificatie attribuut. Deze attributen staan benoemd in ImZTC 2.2. Voor het uniek identificeren van een versie van een objecttype blijft de url beschikbaar.
  • Toevoegen van begin-/eind geldigheid aan elk objecttype zoals beschreven in ImZTC 2.2.
  • Relaties worden gelegd op basis van de identificatie in combinatie met tijdvakgeldigheid.
    Hierdoor is het mogelijk dat bijvoorbeeld twee versies van hetzelfde Zaaktype gekoppeld zijn aan één versie van een Besluittype. De begin-/eindgeldigheid van het Besluittype overlapt dan met de begin-/eindgeldigheid van beide versies van het Zaaktype.

Hierdoor is het mogelijk om:

  • Van een zaaktype een nieuwe versie te maken en deze aan bestaande objecttypen te relateren
  • In een consumer/taakapplicatie een objecttypen met een identificatie aan te duiden. Dit maakt het configureren van taakapplicaties veel eenvoudiger.

Bijvoorbeeld:
Zaken

  • Consumer maakt een zaak aan en gebruikt een zaaktypeidentificatie om de actuele versie van het zaaktype op te halen in de Catalogi API
  • In het antwoord staat ook nog de url naar de versie van het zaaktype, deze wordt meegegeven, tezamen met de zaaktypeidentificatie, bij het aanmaken van de zaak.

Documenten:

  • Consumer voegt een document toe aan een zaak.
  • Met de informatieobjecttype-omschrijving en de url naar het zaaktype wordt het Informatieobjecttype behorend bij de versie van het zaaktype opgevraagd.
  • In het antwoordbericht wordt de url naar de versie van het informatieobjecttype opgenomen
  • Het informatieobject wordt aangemaakt en via de url uit het antwoordbericht gekoppeld aan de zaak via een Zaakinformatieobject.

Tot slot een aantal scenario’s waar de API niet aansluit bij hoe de huidige Zaaktype Catalogi in de praktijk gebruikt worden.

  1. create Zaaktype concept=true
    => relateren aan IOT concept=true/false via create Zaaktype-Informatieobjecttype (ztc-010)
    => relateren aan Besluittype concept=true
    => relateren aan Zaaktype concept=true

Alles nieuw aanmaken geeft weinig problemen.

De volgende situaties worden lastig bij het maken van een nieuwe versie van een bestaand Zaaktype:
=> relateren als gerelateerdzaaktype aan Zaaktype concept=false zou moeten kunnen maar mag niet (ztc-010)
=> relateren aan Besluittype concept=false Mag niet volgens ztc-010

Andersom, wanneer van een Zaaktype wat als hoofdzaak ingericht is is het niet meer mogelijk om een bestaand Zaaktype wat niet veranderd is als Deelzaaktype te relateren. (ztc-010)

De volgende resources leggen zelf een relatie naar Zaaktype:

  • Eigenschap (0..n:1)
  • Resultaattype (1..n:1)
  • Statustype (1..n:1)
  • Zaakobjecttype (0..n:1)
  • Roltype (1..n:1)

Wanneer deze resources gerelateerd zijn aan een type met concept=false dan mogen deze niet bijgewerkt worden (inclusief de relatie naar Zaaktype) (ztc-010)
Dit is correct aangezien elk objecttype bij exact 1 zaaktype hoort.

Met de huidige regels moet echter voor een nieuwe versie van een zaaktype (=nieuwe resource Zaaktype) ook van de gerelateerde objecttypen een nieuwe versie aangemaakt worden terwijl dit misschien helemaal niet noodzakelijk is omdat daar geen veranderingen in zijn. Ook is het niet toegestaan om een compleet nieuw zaaktype te relateren aan Besluittypen die al aan een ander, in gebruik zijnd, zaaktype gerelateerd zijn.

  1. create Informatieobjecttype (IOT) concept=true
    => relateren aan Zaaktype concept=true/false via create Zaaktype-Informatieobjecttype (ztc-010)

De volgende resources leggen zelf een relatie naar IOT:
=> Besluittype concept=true (0..n:0..n) toegstaan (ztc-010)
NB. Om dit Besluittype concept=true te relateren aan een Zaaktype moet deze laatste ook concept-true zijn! Dit is ook logisch, anders zou het Zaaktype veranderen terwijl het geen concept meer is. In dit geval dient er dus een nieuwe versie van het Zaaktype gemaakt te worden.

De volgende resources leggen zelf een relatie naar IOT via create Zaaktype-Informatieobjecttype:

  • Resultaattype (1..n:1)
  • Statustype (1..n:1)

Dit mag via create Zaaktype-Informatieobjecttype , ook wanneer deze objecttypen zelf al gerelateerd zijn aan een Zaaktype met concept=false (ztc-010)

  1. create Besluittype concept=true
    => Relateren aan zaaktype concept=true
    => Relateren aan IOT concept=true

De volgende resources leggen zelf een relatie naar IOT via create Zaaktype-Informatieobjecttype:

  • Resultaattype (1..n:1)
    Dit mag wanneer het Restultaattype gerelateerd is aan een Zaaktype concept=true.

=> create/update Eigenschap
=> create/update Statustype
=> create/update Roltype
=> create/update Resultaattype
=> create/update Zaakobjecttype

Deze operaties mogen alleen relateren naar een Zaaktype concept=true of een Zaaktype-Informatieobjecttype waarvan tenminste of het Zaaktype of het IOT concept=true is. (ztc-11)

@hdksi
Copy link
Collaborator

hdksi commented Nov 5, 2021

Het lukt me niet hier nu uitgebreid naar te kijken en dit is eigenlijk een zijstapje bij dit issue, maar dit

Objecttypen hebben in ImZTC 2.2 hun eigen begin-/eind geldigheid. Dit is in de Catalogi API platgeslagen naar begin-/eind geldigheid van het Zaaktype.

is volgens mij geen shortcut maar een correcte interpretatie van het ImZTC aangeeft. Namelijk dat objecten gerelateerd aan zaaktypen (behalve besluittypen in informatieobjecttypen):

  1. bij precies één zaaktype horen, en
  2. dat 'begin geldigheid' van ieder van deze objecten volgens de toelichting samenvalt met de "ingang van een versie van het zaaktype d.w.z. niet op tussenliggende datums", terwijl einde geldigheid samenhangt met "een overgang naar een nieuwe versie van het zaaktype d.w.z. niet op tussenliggende datums."

Ergo: begin en einde geldigheid van gerelateerde objecten vallen altijd samen met begin en einde geldigheid van een zaaktype(versie). Vastleggen van deze datums bij zowel het zaaktype als gerelateerde resources in de Catalogi API zou dus (behalve voor besluittypen en informatieobjecttypen - die inderdaad eigen attributen voor begin en einde geldigheid kennen) redundant zijn.

Let op: hiermee zeg ik niet dat de harde koppeling tussen (één) zaaktype en gerelateerde objecten in stand moet blijven. Als daar behoefte aan is valt absoluut te overwegen het informatiemodel en de Catalogi API-standaard aan te passen. Echter zie ik de aanleiding daartoe niet meteen in deze user story die immers ging om besluittypen en informatieobjecttypen.

Edit, toevoeging naar aanleiding van de suggestie van @mnji:

Doordat ZTC-012 nog steeds afdwingt dat je een ZT niet mag publiceren zolang er relaties zijn met concept objecten, levert het schrappen van ZTC-010 en ZTC-011 helemaal geen probleem op. Die regel dwingt immers af dat bij gepubliceerde zaaktypen alle relaties correct zijn naar gepubliceerde IOT's en BT's, waardoor het schrappen van ZTC-010 en ZTC-011 alleen impact heeft op concept Zaaktypen.

De laatste twee gedragsregels dwingen ook af dat je bijvoorbeeld geen nieuw resultaattype (zonder conceptstatus) aan een bestaand, gepubliceerd zaaktype (concept=false) hangt - iets wat ZTC-012 niet kan voorkomen, maar in het ImZTC niet is toegestaan. Ik vraag me af of je die beperking niet wél in stand wil houden gezien de moeite die er op andere plekken is gestopt in het onmogelijk maken van mutaties op het zaaktype zonder dat daarbij een nieuwe versie ontstaat. Maar dit is misschien een vraag voor de verantwoordingsspecialisten onder ons.

Edit: ik was in de (verkeerde) veronderstelling dat alle resources in de Catalogi API een concept-flag hadden. Nu dat alleen geldt voor Informatieobjecttypen en Besluittypen gaat het bovenstaande niet op...

@michielverhoef
Copy link
Collaborator

@hdksi Waar het mis gaat is dat de resource Zaaktype een versie van een Zaaktype is en niet hetzelfde als een Zaaktype zoals beschreven in het ImZTC.

Ergo: begin en einde geldigheid van gerelateerde objecten vallen altijd samen met begin en einde geldigheid van een zaaktype(versie)

Dit klopt volgens mij niet helemaal., tenminste niet voor alle gerelateerde objecten.
Bijvoorbeeld Zaaktype A is gerelateerd aan Zaaktype B.
De begin-/eindgeldigheid van Zaaktype A staat los van de begin-/eindgeldigheid van Zaaktype B. Stel dat er een wijziging is in Zaaktype A (er komt een nieuwe versie van Zaaktype A, dat is een nieuwe resource Zaaktype A in de Catalogi API) en niet in Zaaktype B dan zou je toch die relatie willen kunnen leggen. Met de harde relaties op basis van urls kan dat niet. Dat kan wel door middel van een niet-unieke identificatie en begin-/eindgeldigheid.
Zaaktype B hoeft immers niet te veranderen maar met de regel ztc-011 kan ik de relatie niet leggen.

@michielverhoef
Copy link
Collaborator

Let op: hiermee zeg ik niet dat de harde koppeling tussen (één) zaaktype en gerelateerde objecten in stand moet blijven. Als daar behoefte aan is valt absoluut te overwegen het informatiemodel en de Catalogi API-standaard aan te passen. Echter zie ik de aanleiding daartoe niet meteen in deze user story die immers ging om besluittypen en informatieobjecttypen.

Het informatiemodel ImZTC maakt het mogelijk om met functionele koppeling te werken. De userstory gaat over de regels ZTC-010 en ZTC-011 die gevolgen hebben voor het onderhoud van objecttypen en relaties. Dat gaat verder dan alleen informatieobjecttypen en besluittypen.

Regel ZTC-010 is ook een beetje krom in de zin dat zoals het er nu staat mogelijk lijkt een relatie tussen een zaak die reeds gepubliceerd is (concept=false) en een Informatieobjecttype wat nog niet gepubliceerd is (concept=true). Tenminste, dit zou kunnen wanneer je de tekst letterlijk neemt: "Voor ZaakType-InformatieObjectType gelden bovenstaande regels (ztc-010) alleen in het geval waarbij zowel het ZaakType als het InformatieObjectType concept=False hebben"

Maar een dergelijke relatie mag volgens mij helemaal niet gelegd worden, het zaaktype is immers in gebruik en dan mag je het niet zomaar veranderen. Of ik moet het verkeerd begrijpen maar dan is de tekst niet duidelijk genoeg.

@MNIJ
Copy link

MNIJ commented Nov 8, 2021

Regel ZTC-010 is ook een beetje krom in de zin dat zoals het er nu staat mogelijk lijkt een relatie tussen een zaak die reeds gepubliceerd is (concept=false) en een Informatieobjecttype wat nog niet gepubliceerd is (concept=true). Tenminste, dit zou kunnen wanneer je de tekst letterlijk neemt: "Voor ZaakType-InformatieObjectType gelden bovenstaande regels (ztc-010) alleen in het geval waarbij zowel het ZaakType als het InformatieObjectType concept=False hebben"

Maar een dergelijke relatie mag volgens mij helemaal niet gelegd worden, het zaaktype is immers in gebruik en dan mag je het niet zomaar veranderen. Of ik moet het verkeerd begrijpen maar dan is de tekst niet duidelijk genoeg.

Ah, ik dacht juist dat dit een bewuste keuze was, om het mogelijk te maken om een nieuw IOT aan bestaand ZT te kunnen koppelen. Dan maak je het nieuwe IOT als concept aan, koppelt het aan alle bestaande ZTen waar het relevant voor is en publiceert vervolgens het IOT.

Bijvoorbeeld: gemeente wil zienswijzen als Instagram Videos mogelijk maken, creeert nieuw IOT "Instagram Zienswijze" en koppelt het aan alle bestaande zaaktypen waar zienswijzen van belang zijn.

Dat scenario wordt in ieder geval mogelijk door die formulering van de business rule. Of dit ook een wenselijk/noodzakelijk scenario is, is een tweede. Mocht dit scenario sneuvelen, is het immers altijd nog mogelijk om nieuwe versies van die ZTen aan te maken.

@michielverhoef
Copy link
Collaborator

Dat het scenario mogelijk zie ik maar volgens mij is dat juist niet wenselijk: Je verandert immers "iets" aan het zaaktype zonder een nieuwe versie van dat zaaktype te maken. En dat mag niet.

@hdksi
Copy link
Collaborator

hdksi commented Nov 8, 2021

Ah, ik dacht juist dat dit een bewuste keuze was, om het mogelijk te maken om een nieuw IOT aan bestaand ZT te kunnen koppelen.

Dat dacht ik ook. Maar mogelijk kan @ArjanKloosterboer hier meer zekerheid over geven.

De begin-/eindgeldigheid van Zaaktype A staat los van de begin-/eindgeldigheid van Zaaktype B. Stel dat er een wijziging is in Zaaktype A (er komt een nieuwe versie van Zaaktype A, dat is een nieuwe resource Zaaktype A in de Catalogi API) en niet in Zaaktype B dan zou je toch die relatie willen kunnen leggen. Met de harde relaties op basis van urls kan dat niet. Dat kan wel door middel van een niet-unieke identificatie en begin-/eindgeldigheid.

Volgens het ImZTC is dit inderdaad niet toegestaan: een nieuwe relatiesoort ZAAKTYPE heeft gerelateerd ZAAKTYPE (of ZAAKTYPE is deelzaaktype van ZAAKTYPE) ontstaat of eindigt "alleen op een datum die gelijk is resp. een dag ligt voor een (en dezelfde) Versiedatum van het zaaktype en het gerelateerd zaaktype."

Toevoeging: reactie op eerdere bijdrage van @mnji:

Ja, dat is ook mogelijk, je kan die relatie leggen zo lang minimaal één van de twee (ZT of IOT) nog in concept is. Dat is de uitzondering die geformuleerd is in ZTC-010 "Voor ZaakType-InformatieObjectType gelden bovenstaande regels (ztc-010) alleen in het geval waarbij zowel het ZaakType als het InformatieObjectType concept=False hebben".
Voor Besluittype bestaat die uitzondering niet.

Is het probleem verholpen als we eenzelfde uitzondering voor Zaaktype-Besluittypen zouden toevoegen?

Dan het probleem met ZTC-011. Als je een nieuw ZT maakt is dat uiteraard nog concept. Zodra je daar een gepubliceerd IOT aan koppelt, zegt ZTC-011 dat je het concept ZT niet meer mag aanpassen omdat het een relatie heeft naar een gepubliceerd object. Dat is ontzettend onpraktisch, want dat betekent dat je wijzigingen aan het concept ZT in een precieze volgorde moet doen.

Bij ZTC-011 zie ik - analoog aan ZTC-010 - een uitzondering voor relaties tussen Zaak- en Informatieobjecttypen: "Voor ZaakType-InformatieObjectType gelden bovenstaande regels (ztc-011) alleen in het geval waarbij zowel het ZaakType als het InformatieObjectType concept=False hebben". Op basis van deze uitzondering triggert het relateren van een bestaand, gepubliceerd Informatieobjecttype (concept=false) aan een concept-Zaaktype (concept=true) deze regel niet. Ook hier is te overwegen de bestaande uitzondering uit te breiden naar Besluittypen.

@MNIJ
Copy link

MNIJ commented Nov 11, 2021

  1. Niets aanpassen in de standaard en bij een wijziging aan een objecttype het gehele zaaktype inclusief gerelateerde objecttypen opnieuw aanmaken.
  2. De standaard aanpassen en mogelijk maken dat objecttypen aan meer dan één versie van een ander objecttype gerelateerd zijn.

Voor die laatste wijze is het volgende nodig:

  • Toevoegen van een identificatie attribuut aan elk objecttype. Dit is geen uniek gegeven, elke versie van het objecttype heeft hetzelfde identificatie attribuut. Deze attributen staan benoemd in ImZTC 2.2. Voor het uniek identificeren van een versie van een objecttype blijft de url beschikbaar.
  • Toevoegen van begin-/eind geldigheid aan elk objecttype zoals beschreven in ImZTC 2.2.
  • Relaties worden gelegd op basis van de identificatie in combinatie met tijdvakgeldigheid.
    Hierdoor is het mogelijk dat bijvoorbeeld twee versies van hetzelfde Zaaktype gekoppeld zijn aan één versie van een Besluittype. De begin-/eindgeldigheid van het Besluittype overlapt dan met de begin-/eindgeldigheid van beide versies van het Zaaktype.

Voorstel 2. is een heel goede oplossing voor dit probleem. Maar het is volgens mij niet nodig om dit zo generiek voor alle objecttypen te doen. Er is qua datamodellering een groot verschil tussen objecttypen die een 1 op 1 relatie hebben met een zaaktype en objecttypen die op zichzelf staan en gerelateerd kunnen zijn aan meerdere zaaktypen.

Die eerste categorie bevat objecctypen zoals roltype, statustype e.d. Dit zijn geen op opzichzelfstaande objecten, ze hebben alleen bestaansrecht in combinatie met een zaaktype en zijn in het datamodel gerelateerd aan één zaaktype. Het is dan prima om ze ook direct te koppelen aan één specifieke versie van dat zaaktype, precies zoals de huidige standaard dat doet. Als er een nieuwe versie van het zaaktype moet komen, kunnen al deze gerelateerde objecten gewoon gekopieerd worden en dit heeft geen impact op de rest van de ZTC. Dus voor deze objecttypen introduceert de oplossing alleen maar extra complexiteit zonder dat het een probleem oplost.

Deze oplossing is wel heel goed voor die tweede categorie van objecttypen, die op zichzelf staan en relaties kunnen hebben met meerdere zaaktypen. Daarin vallen de zaaktypen zelf, besluittypen en informatieobjecttypen en het gaat dus om de volgende relaties:

  • ZT - ZT (zowel gerelateerdeZaaktypen als deelzaaktypen)
  • ZT - BT
  • ZT - IOT
  • BT - IOT

Voor de ZT - ZT relaties is een heel vergelijkbare oplossing al voorgesteld in #1851 en het is een goed idee om het op dezelfde manier voor al deze relaties te doen. Zaaktypen kennen al een identificatie attribuut waarop de relatie gelegd kan worden, zo'n attribuut zou dan moeten worden toegevoegd aan BT en IOT. Alle drie deze objecttypen hebben al begin- en eindegeldigheid attributen. Het identificatie attribuut zou dan wel verplicht moeten worden (is het nu niet bij Zaaktype).

Ik begrijp nog niet helemaal wat je bedoelt met "Relaties worden gelegd op basis van de identificatie in combinatie met tijdvakgeldigheid." De kern van het probleem en deze oplossing is juist dat je niet van tevoren weet wanneer er een aanpassing nodig gaat zijn aan een gerelateerd objecttype en dus de relaties tussen deze objecttypen tijd- en versie onafhankelijk moet zijn. Uiteraard speelt de begin/einde geldigheid wel een rol bij het aanmaken van instanties van een objecttype. (als je een ZAAK aanmaakt, moet dat zijn van de op moment geldige versie van het ZAAKTYPE en net zo voor BESLUIT en INFORMATIEOBJECT)

@MNIJ
Copy link

MNIJ commented Nov 12, 2021

Is het probleem verholpen als we eenzelfde uitzondering voor Zaaktype-Besluittypen zouden toevoegen?

@hdksi dat zou het probleem voor de ZT - BT relatie verminderen, maar niet oplossen. Mocht er dan een nieuwe versie van het BT komen, is het nog steeds noodzakelijk om ook alle ZTen die dat BT gebruiken aan te passen. En bovendien is hierboven al geconstateerd dat juist deze uitzondering potentieel een ongewenst bij-effect heeft.

De oplossing om de relaties op een versie-onafhankelijke identificatie te leggen is veel robuuster en zuiverder.

@joeribekker
Copy link
Collaborator

Als ontwikkelaar van de ZGW API-specificaties en "interprator" van het ImZTC wil ik hier wel even op reageren.

Voor de lezers zal ik ook even verwijzen naar de exacte tekst uit de specificatie: https://vng-realisatie.github.io/gemma-zaken/standaard/catalogi/index#ztc-010

Michiel verwoordt het basisprincipe correct:

Je verandert immers "iets" aan het zaaktype zonder een nieuwe versie van dat zaaktype te maken. En dat mag niet.

Hier zou ik ook niet aan willen tornen.

Een versie was inderdaad heilig maar ik zie wel de problematiek. Het gaat vooral om "de waarheid" en die moet niet ongemerkt aangepast kunnen worden.

Idee

Doordat we niet meer alle gegevens kopieren van zaaktype naar zaak, moet de waarheid bij de bron dus bewaakt worden. Een IOT / BT toevoegen aan een ZT zonder een nieuwe versie van dat ZT op te voeren is daarmee onwenselijk omdat de geldigheidsdatum alleen ligt bij het ZT (en BT en IOT) en niet ook op de relatie tussen ZT en BT / IOT.

Als de begin/eind datum op de relatie wordt vastgelegd, heb ik er ook minder problemen mee dat de relatie wordt gelegd met gepubliceerde typen. Je kan immers achterhalen sinds wanneer een nieuw BT/IOT beschikbaar is gekomen voor een bepaald ZT. Je bent dan niet de waarheid kwijt. Ik pleit dan wel voor de relatieklasse (zei ik dat nou echt?) zaaktype-besluittype toe te voegen waar de begin/einddatum ook in opgenomen kan worden.

Als we dichter bij het huidige model willen blijven

Als het probleem is dat een gepubliceerd informatieobjecttype niet kan worden gerelateerd aan een concept zaaktype, dan is dat wel een probleem dat opgelost moet worden. Het lijkt me dat ZTC-10 en ZTC-11 aangepast moeten worden om dit mogelijk te maken, door expliciet te spreken over de hoofd-resources (ZT, IOT, BT, zeg maar de many-to-many's) en geneste resources (Statustype, Eigenschap, Resultaattype, de many-to-one's).

Voor een gepubliceerd ZT blijft echter gelden dat je hier geen nieuwe IOT en BT relaties naar mag leggen. Omgekeerd vind ik dit minder interessant maar dat maakt het ook minder consistent.

PS. Ik zou zelf nog even wegblijven van de versie-onafhankelijke identificatie.
PS2. Ik zou ZT-ZT anders behandelen in het ticket dat er al voor is in #1851

@MNIJ
Copy link

MNIJ commented Nov 18, 2021

Voor de goede orde, de insteek van dit issue was niet om het mogelijk te maken om nieuwe IOT of BT relaties te leggen naar een gepubliceerd ZT. Dat kan nu voor IOTs wel, maar dat is een (blijkbaar onbedoeld) bij-effect van de uitzondering geformuleerd in ZTC-011. Geen enkel probleem als die mogelijkheid in een nieuwe versie wordt afgesneden. Sterker nog wij ondersteunen dit momenteel sowieso al niet via de UI van onze ZTC beheertool.

De insteek van dit issue is dat het mogelijk moet worden om aan een Concept ZT relaties toe te voegen naar al gepubliceerde BT en IOT. En dat het mogelijk moet zijn om een Concept ZT nog aan te passen als deze relaties heeft naar al gepubliceerde BT, IOT en/of andere ZT. Dat is namelijk een daadwerkelijke blokkade voor beheer van de ZTC.

Dat kan gerealiseerd worden met het herschrijven of schrappen van business rules ZTC-010 en ZTC-011 en dat heeft natuurlijk veel minder impact dan de relaties versie-onafhankelijk leggen, ook al vind ik dat persoonlijk wel een robuustere oplossing.

Voor de ZT - ZT relaties is het niet zo eenvoudig op te lossen volgens mij. Maar daar is inderdaad ticket #1851 voor.

Edit ter aanvulling: de problemen beschreven in #1851 bestaan nog steeds ook voor BT en IOT als ZTC-010 en ZTC-011 worden aangepast. Stel, een BT wordt gebruikt in vijf zaaktypen en nu moet er iets aangepast worden in dat BT. Dan moet je een nieuwe versie van dat BT maken, maar dus ook nieuwe versies van die vijf ZTs. Maar mijn inschatting is dat dat in de praktijk een minder groot probleem is dan bij ZT - ZT relaties, omdat mijn aanname is dat wijzigingen aan BTs of IOTs veel zeldzamer zijn dan aan ZTs. Maar dat kan ook een foute aanname zijn.
Bij relaties via een versie-onafhankelijke identificatie bestaan deze problemen in het geheel niet meer.

@ArjanKloosterboer
Copy link
Contributor

@michielverhoef vroeg me te reageren. Nu dan. Ik heb alle bijdragen gelezen en pogen te begrijpen. Al met al kan ik me niet aan de indruk onttrekken dat het ImZTC niet in de API geimplementeerd is zoals het bedoeld is. Wat m.i. tot de genoemde problemen leidt.
Er wordt ergens gesteld dat een nieuwe versie van een zaaktype zou leiden tot nieuwe instanties van zaaktype, statustype, resultaattype e.d. Zo is het ImZTC evenwel niet bedoeld. Er ontstaan alleen nieuwe instanties voor objecten die gewijzigd zijn. Het element Versiedatum is slechts een informatief attribuut dat geen deel uitmaakt van de identificatie noch deel uitmaakt van het onderliggende historiemodel. Om dat laatste draait het.
Elk objecttype kent in het ImZTC een 'Datum begin geldigheid' en 'Datum einde geldigheid'. Deze gaan over de geldigheid van een instantie; wanneer is die ontstaan en wanneer is die beeindigd. Zeg maar, de geboortedatum en de sterfdatum. Dus niet de datum waarop de wijziging van de waarde van een element van een instantie ingaat, zoals ik ergens meen te lezen.
Elk attribuutsoort in het ImZTC kent het metadataveld 'Materiele historie'. In de meeste gevallen heeft dat de waarde 'ja' oftewel waardewijzigingen van dat attribuut moeten beschikbaar zijn. Anders gezegd, mutaties van het object moeten voor dergelijke attributen vastgelegd worden, zodat de historie van mutaties van attributen beschikbaar is. Technisch wordt dit veelal geconcretiseerd in een element 'Datum begin mutatie' wat aangeeft vanaf wanneer de gewijzigde waarde geldig is.
Ale drie genoemde elementen zie ik op deze wijze in de API niet terug. Wat mij de indruk geeft dat het historiemodel niet goed geimplementeerd is.
En dan zijn er in het ImZTC nog regels zoals "De attribuutsoort verandert alleen van waarde (materiële historie) op een datum die gelijk is aan een Versiedatum van het gerelateerde zaaktype." Dit is niet meer dan een inperking van de waardes die de drie genoemde attributen mogen aannemen. Het doet niets af aan het historiemodel. Het betekent dat een object alleen geldig mag worden, zijn geldigheid mag verliezen en van waarden mag wijzigen op een datum die overeenkomt met, uiteindelijk, een datum vanaf wanneer een versie van de catalogus geldig is geworden. Bij een nieuwe versie van de catalogus zullen niet alle zaaktypen wijzigen. De versiedatum van die zaaktypen wijzigt dan niet, er is geen sprake van nieuwe versies van die zaaktypen.
Dan is in de Catalogus-API het construct 'concept' toegevoegd. Maar ik zie 'm alleen bij Zaaktype en zou 'm verwachten bij elk objecttype. Of nergens. 'Concept' betekent mi. een beoogde toevoeging (van een object) of beoogde wijziging van de waarden (van één of meer elementen) van een object. Een potentiele mutatie in de toekomst, dus. Past m.i. helemaal in het historiemodel waarbij 'Datum begin geldigheid' en 'Datum ingang mutatie' dan in eerste instantie een datum ver in de toekomst krijgen ( 31-12-2099) die later aangepast wordt op de ingangsdatum van de versie waarin deze wijzigingen doorgevoerd worden.
Door op elk object dit historiemodel goed toe te passen, vraag ik me af of de regels 010 en 011 volgens de huidige formulering nog wel nodig zijn. Je kunt probleemloos bijvoorbeeld een nieuw resultaattype als concept vastleggen bij een bestaand zaaktype. Begin geldigheid van dat resultaattype is dan 31-12-2099 dus voorlopig niet. Bij het bevragen van zaaktypen moet altijd de datum beseft worden waarvoor gegevens opgevraagd worden. Default zou ik zeggen: vandaag. Dat nieuwe resultaattype komt dan niet beschikbaar.
Voor een Informatieobjecttype en een Besluittype werkt dit op vergelijkbare wijze. Wel is het zo dat hierbij nog een extra historielijn van toepassing is: niet alleen wanneer ontstaan en wanneer gewijzigd maar ook wanneer gekoppeld aan een zaaktype. Dat is een Materiele historie-kenmerk van de desbetreffende relaties. Voor een Informatieobjecttype kan dit opgenomen worden in de relatietabel met Zaaktype, voor Besluittype moet een oplossing gevonden worden (wsl zoals geopperd ook mbv een relatietabel).
Hoe je dit alles goed implementeert in een API weet ik (nog) niet precies maar de ideeen van Michiel lijken me een goede oplossingsrichting. Dat lost voorlopig het onderhavige probleem niet op, vrees ik. Dan is het een idee dat dan maar pragmatisch te doen en onderwijl te werken aan een betere maar ingrijpender oplossing.

@michielverhoef
Copy link
Collaborator

Hieronder wordt per geval gekeken hoe het leggen van een relatie tussen objecttypen gedaan moet worden. Vuistregel is dat wanneer versie van een objecttype aan meer dan één versie van een ander objecttype gerelateerd kan worden dit gebeurt via een identificatie. Op basis van de begin-/einddatum wordt dan gekeken welke versie van het gerelateerde objecttype van toepassing is. NB. Dit is een voorstel, nog geen besluit hoe relaties te leggen!

Voor het gebruik van zaaktypen vanuit een consumer applicatie kunnen zowel de identificatie als de url gebruikt worden. Bijvoorbeeld het aanmaken van een zaak, dat gebeurt met een identificatie. Deze hoeft dan niet te veranderen wanneer een nieuwe versie van dat zaaktype gemaakt wordt. Een aangemaakte zaak kan middels de url verwijzen naar de exacte versie van het zaaktype. Dit maakt terugzoeken weer veel eenvoudiger. Eenzelfde methode kan gebruikt worden voor het maken van Informatieobjecten of Besluiten.

Vragen die gesteld kunnen worden:

  • Kan het voorkomen dat een zaaktype reeds in gebruik is en dat dit zaaktype als deelzaaktype van een ander, nieuw zaaktype gebruikt wordt?
  • Dezelfde vraag voor gerelateerd zaaktype.
  • Moet altijd een nieuwe versie van Zaaktype gemaakt worden wanneer een nieuwe versie van een Informatieobjecttype of Besluittype gemaakt wordt? Of werkt dan de combinatie begin-/einddatum ook? Met andere woorden, wordt van een zaaktype alleen dan een nieuwe versie gemaakt wanneer aan de versie (objecttype Zaaktype) zelf iets verandert?

Zaaktype concept=true -> gerelateerdZaaktype concept=true/false

Gelegd via identificatie. Het gerelateerde Zaaktype kan veranderen zonder dat dat van invloed is op dit Zaaktype. Is de relatie niet meer van toepassing wordt in een nieuwe versie van het Zaaktype de relatie verwijderd.

Zaaktype concept=true -> is Deelzaaktype van Zaaktype concept=true/false

Gelegd via identificatie. Het gerelateerde hoofdzaak Zaaktype kan veranderen zonder dat dat van invloed is op dit deelzaak Zaaktype. Is de relatie niet meer van toepassing wordt in een nieuwe versie van het deelzaak Zaaktype de relatie verwijderd.

Zaaktype concept=true -> Besluittype concept=true/false

Gelegd via URL. Wanneer iets aan een Besluittype verandert verandert ook het Zaaktype en komt daar een nieuwe versie van.

Zaaktype concept=true -> Zaaktype-Informatieobjecttype -> Informatieobjecttype concept=true/false

Zaaktype-Informatieobjecttype is een relatieklasse. Relaties via identificatie. Een Informatieobjecttype kan voor meerdere versies van een Zaaktype van toepassing zijn. Een nieuwe versie van een Informatieobjecttype kan leiden tot een nieuwe versie van een Zaaktype maar dat hoeft niet. Is een Informatieobjecttype niet meer van toepassing voor een Zaaktype wordt de relatieklasse beëindigd.

Roltype -> Zaaktype concept=true

Relaties via identificatie. Een Roltype kan voor meerdere versies van een Zaaktype van toepassing zijn. Een nieuwe versie van een Roltype kan leiden tot een nieuwe versie van een Zaaktype maar dat hoeft niet. Leggen van een relatie Roltype naar Zaaktype mag alleen indien Zaaktype concept=true.

Statustype -> Zaaktype concept=true

Relaties via identificatie. Een versie van een Statustype kan voor meerdere versies van een Zaaktype van toepassing zijn. Een nieuwe versie van een Statustype leidt tot een nieuwe versie van een Zaaktype. Leggen van een relatie Statustype naar Zaaktype mag alleen indien Zaaktype concept=true.

Statustype -> Zaaktype-Informatieobjecttype -> Informatieobjecttype concept=true/false , Zaaktype concept=true

Relaties via url. Een versie van een Statustype kan voor meerdere versies van een Zaaktype van toepassing zijn. Een nieuwe versie van een Statustype leidt tot een nieuwe versie van een Zaaktype, een Zaaktype-Informatieobjecttype kan aan meerdere versies van een Zaaktype gekoppeld zijn.

Eigenschap -> Zaaktype concept=true

Gelegd via URL. Eigenschap is een per zaaktype definieerbaar attribuut van dat zaaktype dus moet bij een nieuwe versie van een zaaktype ook de eigenschap opnieuw aangemaakt worden.

Zaakobjecttype -> Zaaktype concept=true

Gelegd via identificatie. Voorbeeld: Een zaakobjecttype “ligplaats” is een verwijzing naar RSGB object wat van belang is bij een Zaaktype voor de aanvraag van een ligplaats voor een boot. Dat verandert niet wanneer een nieuwe versie van het zaaktype gemaakt wordt. Op het moment dat er een andere versie van een zaakobjecttype van toepassing is, is er ook sprake van een nieuwe versie van een zaaktype.

Resultaattype -> Zaaktype concept=true

Gelegd via identificatie. Hetzelfde Resultaattype kan van toepassing zijn voor meerdere versies van een Zaaktype. Dat verandert niet wanneer een nieuwe versie van het zaaktype gemaakt wordt. Op het moment dat er een andere versie van een resultaattype van toepassing is, is er ook sprake van een nieuwe versie van het gerelateerde zaaktype.

Resultaattype -> Zaaktype-Informatieobjecttype -> Informatieobjecttype concept=true/false, Zaaktype concept=true

Relaties via url. Een versie van een Resultaattype kan voor meerdere versies van een Zaaktype van toepassing zijn. Een nieuwe versie van een Resultaattype leidt tot een nieuwe versie van een Zaaktype, een Zaaktype-Informatieobjecttype kan aan meerdere versies van een Zaaktype gekoppeld zijn.

@MNIJ
Copy link

MNIJ commented Dec 2, 2021

Vast even een korte reactie, in afwachting van de meeting over o.a. dit onderwerp later vandaag. Met een groot deel van bovenstaand voorstel van @michielverhoef ben ik het eens, bij een aantal dingen heb ik nog vraagtekens. Maar om te zorgen dat alle relevante relaties gedekt zijn, wil ik in ieder geval even noemen:

  • Ik mis in bovenstaande lijst nog de relatie Besluittype -> Informatieobjecttype
  • De laatst genoemde relatie Resultaattype -> Zaaktype-Informatieobjecttype -> Informatieobjecttype concept=true/false, Zaaktype concept=true ken ik helemaal niet. Er is toch geen relatie tussen Resultaattype en Informatieobjecctype?

@michielverhoef
Copy link
Collaborator

@MNIJ
Copy link

MNIJ commented Dec 3, 2021

Om op het laatste in te gaan: Dat gaat over de relatie https://www.gemmaonline.nl/index.php/Imztc_2.2/doc/relatiesoort/resultaattype.heeft_verplichte_zaak-informatieobject-type

Ah, een relatie die nog niet bestaat in de ZGW ZTC 1.1 dus.

@michielverhoef
Copy link
Collaborator

Klopt, deze relatie moet nog toegevoegd worden in 1.2.0. Dit hoort bij #1876

@michielverhoef
Copy link
Collaborator

TODO: uitwerking beperkt historiemodel toevoegen @michielverhoef

@michielverhoef
Copy link
Collaborator

Aanpassing van ZTC-11 is beschreven in #2209

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

7 participants