gemma-zaken icon indicating copy to clipboard operation
gemma-zaken copied to clipboard

Als developer verwacht ik meer filter opties

Open rubenvdlinde opened this issue 4 years ago • 17 comments

Als developer verwacht ik dat ik op de zaak API's een lijst kan samenstellen van zaken waarop een gebruiker vanuit een rol actie moet ondernemen (bijvoorbeeld een medewerker die beheerder is) t.b.v een werkvooraad.

Daarvoor zou ik op het zaken endpoint moeten kunnen filteren op rollen_betrokkene en rollen_betrokkeneType. Maar dat kan nu niet. Andersom (vanuit rollen) zou an zich ook kunnen maar is denk ik minder net, al was het maar omdat dan bijna alle zaak proporties filterbaar zouden moeten worden gemaakt op het rollen endpoint.

Dit lijkt mij voor een verdere implementatie overigens brekend, het weergeven van een werkvoorraad lijkt mij persoonlijk minimale eis voor zaaksystemen. De enige methode die ik daar als developer nu voor (lijk) te hebben is om beide lijsten (alle zaken met een bepaald status en alle rollen met bepaalde betrokkene en type) op te halen en onderling te vergelijken.

Maar dat wordt in een productie status natuurlijk snel gek, het zou betekenen dat ik een loop in een loop moet gaan doen om data te vergelijken. Das serieuze systeem belasting en laadtijd. Daarnaast zou ik dan de data die ik niet wil hebben (zaken van een andere behandelaar bijvoorbeeld) wel hebben opgehaald maar niet gebruiken. Wat vanuit loging, privacy by design en last op broncomponenten en dataverkeer natuurlijk weer onwenselijk is.

Neem voor de gedachte een een situatie waarin een een ambtenaar in een middelgroote gemeente een jaartje op openzaak heeft gewerkt. 10 zaken per dag? Hebben we het over 3500 ish rollen waar hij als betrokkene in hangt versus alle openstaande zaken in de gemeente na een jaar? 30.000? Krijgen we 30.000 *3500 vergelijkingen. Das 3.675.000.000.000 berekeningen die je even door je cluster heen trekt. Succes met dat laadscherm. Nog even los van de logs die je crieërd en dataverkeer en het geheugen gebruik van al deze objecten onderwijl je ze aan het vergelijken bent.

Overigens staat in aanvulling hierop #1586 ook nog steeds open.

rubenvdlinde avatar Apr 10 '20 10:04 rubenvdlinde

+1 van mij.

En eigenlijk zie ik dit zelfs breder binnen de context van een krachtige (document) search API, waar je veel flexiber kan omgaan met zoekdimensies. Achterliggende tech voor dat zou dan Elastic Search of Solr o.i.d. kunnen zijn.

sergei-maertens avatar Apr 10 '20 10:04 sergei-maertens

Middels #1625 wordt de filtering uitgebreid.

joeribekker avatar May 22 '20 14:05 joeribekker

Middels #1625 wordt de filtering uitgebreid.

Echter met deze uitbreiding kun je nog steeds niet gecombineerd filteren op een betrokkene en een status van een zaak omdat de status van een zaak in een ander endpoint zit, te weten /statussen. Dus ik weet niet of de vraag van @rubenvdlinde hiermee volledig beantwoord is.

HenriKorver avatar Jun 08 '20 14:06 HenriKorver

In dat geval laat ik em aan jou als API designer :)

joeribekker avatar Jun 18 '20 14:06 joeribekker

@michielverhoef Kun jij deze oppakken?

HenriKorver avatar Jul 22 '20 10:07 HenriKorver

De oplossingsrichting is vergelijkbaar met die om te filteren op betrokkene en zaaktype.

michielverhoef avatar Jul 24 '20 09:07 michielverhoef

Ik ben bang dat ik de oplossing echt niet zie, dit moet wachten tot @HenriKorver weer terug is.

michielverhoef avatar Aug 05 '20 15:08 michielverhoef

Is opgepakt door Michiel en Henri

Hugo-ter-Doest avatar Oct 09 '20 10:10 Hugo-ter-Doest

Wij zijn op dit moment bezig met de implementatie van de zaken endpoint in ons KCS. Ik heb hieromtrent eerder issue #1268 voor aangemaakt maar heb toch nog steeds niet het idee dat het echte pijnpunt is opgelost. Wij willen zaken kunnen filteren op basis van een betrokkene (bijvoorbeeld o.b.v. bsn) en een status. Volgens mij is dit vergelijkbaar hetgeen @rubenvdlinde hierboven beschrijft in dit issue. Zoals het zaken endpoint nu gedefinieerd is lijkt het nog steeds niet mogelijk om te filteren op een betrokkene en moet je op een zeer omslachtige manier via /rollen dit voor elkaar krijgen. Dit zal zoals hierboven beschreven zeker leiden tot performance issues.

#1625 gaat ook over hetzelfde issue. De oplossing zoals daar beschreven zal niet leiden tot efficiency mijns inziens. Aangezien er nu al zoveel issues over gemeld zijn, lijkt mij dat dit z.s.m. verduidelijkt en/of opgelost moet worden.

basretera avatar Oct 16 '20 15:10 basretera

+1 van mijn kant, en ik heb ook ideetjes over hoe dit er moet/kan gaan uitzien.

Je kan op de /zaken endpoint nu wel direct filteren op rollen/betrokkenen (dus je hoeft niet via /rollen endpoint te gaan eerst), maar het is gewoon nog niet flexibel genoeg voor verschillende combinaties.

En op gebied van status is er inderdaad nog niets voorzien. Ik ben zelf wel benieuwd wat je precies bedoelt met het filteren op status, kan je daar een voorbeeld van geven?

binnen de context van Utrecht zijn we nu eigenlijk client-side een Elastic Search index aan het onderzoeken om te kijken of dat haalbaar is als tussenoplossing.

sergei-maertens avatar Oct 16 '20 15:10 sergei-maertens

@sergei-maertens Je geeft aan dat dit al kan op de /zaken eindpoint. Hoe dan???

In ons geval wil ik in eerste instantie alleen openstaande zaken van een betrokkene in het KCS zien. Ik zou dus of op status willen filteren waarbij de laatste status van de zaak nog niet is bereikt of misschien nog handiger kunnen filteren op een gevulde einddatum ja/nee. Dit laatste is volgens mij nog niet mogelijk, toch?

basretera avatar Oct 19 '20 08:10 basretera

Oh, zo te zien loopt de referentie-implementatie achter, dat is niet handig. Echter, bijvoorbeeld op de API spec van Open Zaak zie je de querystring parameters:

  • rol__betrokkene (indien je een BRP API url hebt, bijvoorbeeld)
  • rol__betrokkeneIdentificatie__natuurlijkPersoon__inpBsn indien je gebruik maakt van betrokkeneIdentificatie.inpBsn in de Rol resource
  • rol__betrokkeneIdentificatie__medewerker__identificatie gelijkaardig aan bovenstaand, maar dan voor medewerker.

Deze waren onderdeel van #1625

Met #1686 komt daar ook rol__betrokkeneIdentificatie__organisatorischeEenheid__identificatie bij.

sergei-maertens avatar Oct 19 '20 08:10 sergei-maertens

@basretera

In ons geval wil ik in eerste instantie alleen openstaande zaken van een betrokkene in het KCS zien. Ik zou dus of op status willen filteren waarbij de laatste status van de zaak nog niet is bereikt of misschien nog handiger kunnen filteren op een gevulde einddatum ja/nee. Dit laatste is volgens mij nog niet mogelijk, toch?

Ja, laatste status wel/niet bereikt hangt 1-op-1 samen met einddatum wel/niet gezet. Dus dat lijkt me een prima suggestie om hierop te kunnen filteren. Technisch makkelijk te implementeren en toe te voegen aan de standaard. Ik vermoed dat dit makkelijker behandeld wordt als dit z'n eigen issue wordt. Ik ben zelf geen onderdeel van dit team meer, maar zit nu aan de vragende kant :)

sergei-maertens avatar Oct 19 '20 08:10 sergei-maertens

Oh, zo te zien loopt de referentie-implementatie achter, dat is niet handig. Echter, bijvoorbeeld op de API spec van Open Zaak zie je de querystring parameters:

  • rol__betrokkene (indien je een BRP API url hebt, bijvoorbeeld)
  • rol__betrokkeneIdentificatie__natuurlijkPersoon__inpBsn indien je gebruik maakt van betrokkeneIdentificatie.inpBsn in de Rol resource
  • rol__betrokkeneIdentificatie__medewerker__identificatie gelijkaardig aan bovenstaand, maar dan voor medewerker.

Dat is inderdaad niet zo handig. Wat is nu leidend?? De specificatie https://zaken-api.vng.cloud/api/v1/schema/ moet toch leidend zijn, of heb ik iets gemist? Hierin is bovenstaande niet te vinden.

Daarnaast erg jammer dat de rest van de betrokkene filters t.b.v. NPS, NNP en vestiging niet zijn meegenomen. Als ik nu dus zaken van een vestiging moet ophalen, moet ik nog steeds via het /rollen endpoint. Om dit even concreet te maken zou ik graag van de volgende filters gebruik maken:

  • betrokkeneIdentificatie__natuurlijkPersoon__inpBsn
  • betrokkeneIdentificatie__natuurlijkPersoon__anpIdentificatie (lagere prioriteit)
  • betrokkeneIdentificatie__natuurlijkPersoon__inpA_nummer (lagere prioriteit)
  • betrokkeneIdentificatie__nietNatuurlijkPersoon__innNnpId
  • betrokkeneIdentificatie__nietNatuurlijkPersoon__annIdentificatie (lagere prioriteit)
  • betrokkeneIdentificatie__vestiging__vestigingsNummer
  • betrokkeneIdentificatie__organisatorischeEenheid__identificatie
  • betrokkeneIdentificatie__medewerker__identificatie

Waarom is ervoor gekozen om alleen de vetgedrukte mee te nemen?

basretera avatar Oct 19 '20 09:10 basretera

Ja, laatste status wel/niet bereikt hangt 1-op-1 samen met einddatum wel/niet gezet. Dus dat lijkt me een prima suggestie om hierop te kunnen filteren. Technisch makkelijk te implementeren en toe te voegen aan de standaard. Ik vermoed dat dit makkelijker behandeld wordt als dit z'n eigen issue wordt. Ik ben zelf geen onderdeel van dit team meer, maar zit nu aan de vragende kant :)

Ik heb nieuw issue hiervoor aangemaakt namelijk #1700.

basretera avatar Oct 19 '20 09:10 basretera

Oh, zo te zien loopt de referentie-implementatie achter, dat is niet handig.

@joeribekker Hoe kan het dat de referentie-implementatie achterloopt?

HenriKorver avatar Oct 19 '20 09:10 HenriKorver

Waarom is ervoor gekozen om alleen de vetgedrukte mee te nemen?

Simpelweg om de change zo klein mogelijk te houden en te voldoen aan de noden die we op dat moment bij Utrecht hadden.

Waarom is ervoor gekozen om alleen de vetgedrukte mee te nemen?

Deze repository is leidend! Met Open Zaak hebben we referentie-implementatie, en we kijken naar wat er gebeurt in deze repo. Als we zien dat een voorstel goedgekeurd wordt, dan beginnen we alvast aan implementatie in Open Zaak. Deze changes zijn ook nog geen onderdeel van een officiële Open Zaak versie, we draaien een nightly build in Utrecht hiervan.

sergei-maertens avatar Oct 20 '20 09:10 sergei-maertens