Klantinteractie-Servicesysteem / KISS-frontend

Repository for the KISS frontend developed with ICATT for Dimpact
Other
0 stars 5 forks source link

Klantcontact bij een ZAAK aanmaken > `onderwerpobject` #808

Open sytskevanhasselt opened 2 months ago

sytskevanhasselt commented 2 months ago

Description

Als KCM wil ik een klantcontact aan een Zaak kunnen koppelen, zodat alle betrokkenen bij die zaak kunnen zien dat er contact is geweest en wat daar is besproken.

Estimate

3

Acceptance criteria

Specific details

Test plan

No response

Delivery notes

No response

swrichards commented 4 weeks ago

Bij OIP staan wij zelf op het punt om de koppeling van een Zaak binnen OK2 te implementeren. Ik besef me dat voor deze issue nog niet voorzien is in het gebruik van meerdere zaaksystemen, maar omdat dit voor ons al vroeg een uitdaging is, wilde ik alvast een alternatief voorstel doen ter overweging:

{
  "onderwerpobjectidentificator": {
    // Fully qualified URL naar de zaak, zodat we weten bij welke backend we moeten zijn
    "objectId": "https://test.openzaak.nl/zgw-apis-provider/zrc/api/v1/zaken/dbf3912b-f0f3-417c-a692-514bc7a4171d"

    //Vaste waarden voor de verwijzing
    "codeObjecttype": "zaak",
    "codeRegister": "ZRC",
    "codeSoortObjectId": "zaak-url"
  }
}

Het primaire voordeel hiervan is dat het niet ambigu is bij welke API de zaak kan worden opgevraagd, hetgeen vooral speelt bij meerdere geconfigureerde backends. Nadeel is dat je misschien zelf de UUID moet extraheren als je die nodig hebt voor een andere opties (bijv. een cache lookup).

Is dit iets wat jullie zou passen?

sytskevanhasselt commented 4 weeks ago

Ik denk het wel, we gaan het hier bespreken (@mstokericatt). Dank voor de input.

sytskevanhasselt commented 4 weeks ago

Hoi @swrichards , Wij vroegen ons af of "bij welke API de zaak kan worden opgevraagd" niet volgt uit heet CodeRegister. Maar dat zou wel betekeken dat we, waar wij nu vaste waarde ZRC zetten, we daar een code moeten gebruiken voor het speccifieke zaaksysteem: e-Suite, OpenZaak, Roxit, etc. Dat betekent dat "codeRegister" afgesproken moet worden: per zaaksysteem en per gemeente. (referentielijst?)

swrichards commented 4 weeks ago

Maar dat zou wel betekeken dat we, waar wij nu vaste waarde ZRC zetten, we daar een code moeten gebruiken voor het speccifieke zaaksysteem: e-Suite, OpenZaak, Roxit, etc. Dat betekent dat "codeRegister" afgesproken moet worden: per zaaksysteem en per gemeente.

Ik heb hier ook nog even gepolsd naar de ervaringen in andere projecten. Daar blijkt dat dat dit voorstel in principe erg aantrekkelijk is. Het oorspronkelijke voorstel (geen info over welk zaaksysteem) loopt vaak spaak op het feit dat meerdere zaaksystemen in het ecosysteem eerder regel dan uitzondering zijn (ook >1 systemen van dezelfde leverancier), maar het opnemen van een volledig gekwalificeerde URL heeft dan weer het nadeel dat URLs minder stabiel zijn dan gewenst (met name wat betreft de host: DNS wil nog wel eens veranderen) en eveneens vaak moeilijk verififieerbaar zijn zonder systeem specifieke kennis (Welke versie, welke auth mechanismen, enz.).

Daarmee is iets in de trant van jullie tegenvoorstel een goede balans. De kern daarbij is m.i. dat we ergens in het object een referentie opnemen naar het zaaksysteem, die niet de vorm aanneemt van een URL.

Ik weet niet of codeRegister hiervoor echter de beste plek is. Het is daar wel fijn om ZRC te hanteren zonder subvarianten, dan kan je daar bijvoorbeeld ook makkelijker op filteren en zoeken (het geeft namelijk ook aan dat het in principe om een spec-compliant service gaat, waar die ook draait).

Het alternatief waar elders voor gekozen is, is om de service verwijziging op te nemen in de objectId, bijvoorbeeld als een URN:

{
  "onderwerpobjectidentificator": {
    // Object ID is een URN: namespace is een betekenisvolle label voor een service bekend bij de gemeente, de ID is de zaak identificatie
    "objectId": "urn:openzaak-demodam-primair:ZAAK-2024000001"

    // Zijn constant voor dit soort referenties
    "codeObjecttype": "zaak",
    "codeRegister": "ZRC",
    "codeSoortObjectId": "urn-zaak-identificatie"
  }
}

De namespaces (hier openzaak-demodam-primair) zijn dan inderdaad per gemeente gedefinieerd, en moeten dus out-of-band opgehaald en geconfigureerd worden door clients (bijvoorbeeld via referentielijsten API). Het voordeel hiervan is dat de object ID dus stabiel kan blijven (de achterliggende URL en infrastructuur van openzaak-demodam-primair kan wijzigen, maar de namespace naam kan constant blijven). Dan liggen we minder de nadruk op algemene codes voor algemene zaaksystemen ('eSuite' in het algemeen), maar op de concrete systemen die binnen het ecosysteem van de gemeente bekend zijn. De urn structuur is in principe gedefinieerd en er zullen veelal libraries voorhanden zijn om deze te parsen.

Overigens is er binnen de URN spec ook de mogelijkheid om zogenaamde 'resolver hints' die eventueel ook gebruikt zouden kunnen worden om meer concrete resolver info mee te geven, maar dat is misschien (nog) niet wenselijk.

swrichards commented 3 weeks ago

Zoals besproken tijdens overleg van 17/9 j.l., zullen we ervoor kiezen om de vindplaats op te nemen in codeRegister en de objectId niet te mis/gebruiken om andere gegevens te encoderen dan de ID zelf. Dat krijgen we iets als:

{
  "onderwerpobjectidentificator": {
    "objectId": "ZAAK-2024000001" // of 095be615-a8ad-4c33-8e9c-c7612fbf6c9f

    "codeObjecttype": "zgw-zaak",
    "codeRegister": "openzaak",
    "codeSoortObjectId": "identificatie" // of "uuid"
  }
}
mstokericatt commented 2 weeks ago

Ik ben het helemaal eens met het laatste voorstel