-
Notifications
You must be signed in to change notification settings - Fork 27
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
Het zetten van eindstatus van de zaak met datum geeft vreemd gedrag #2087
Comments
@ArjanKloosterboer Kun jij hier ook naar kijken? |
Een aantal reacties uit de losse heup van mijn kant:
Als ik het zo zie klopt de validatie bij het zetten van een status niet. Het zou niet mogelijk moeten zijn om op een latere datum een status te zetten die een eerdere In dat geval zou de reeds bestaande scope geforceerd-bijwerken gebruikt kunnen worden om een zaak die reeds een eindstatus heeft bereikt te voorzien van een nieuwe, eerdere status. Bij het heropenen van een zaak zou de In Zaken API 1.3 is het attribuut indicatieLaatstGezetteSatus toegevoegd. Dat is dit attribuut in RGBZ 2 https://www.gemmaonline.nl/index.php/Rgbz_2.0/doc/attribuutsoort/status.indicatie_laatst_gezette_status https://zaken-api.test.vng.cloud/api/v1/schema/#operation/status_read Door dit attribuut te gebruiken wordt volgens mij een groot deel van het probleem opgelost, zeker wanneer ook nog de scope Is oplossingsrichting 3 dan nog nodig? Volgens mij niet omdat je nu kunt bepalen of een eindstatus ook daadwerkelijk de laatst gezette status is. Is dit niet zo dan is de zaak nog niet afgehandeld en wordt de einddatum van de zaak niet gezet. |
Dat komt op hetzelfde neer, bij het aanmaken van statustypen kan je het veld
Dit werkt ook al zo. Het is nu al mogelijk om een zaak te heropenen door een andere status dat de eindstatus te zetten. Daarbij wordt de einddatum leeg gemaakt. Dit staat beschreven in ZRC-008 en werkt correct in de implementaties die ik getest heb. Hier is ook een speciale scope voor 'zaken.heropenen'.
Als het inderdaad mogelijk wordt om dit attribuut te zetten bij het plaatsen van een status, dan denk dat dat het probleem inderdaad oplost. Zo te zien is dat het geval. Dit is in feite een variant of invulling van "Oplossingsrichting 2" die ik hierboven beschreef. Dus mooi dat dit probleem al is opgelost! Het is dan wel van belang dat niet ook "Oplossingsrichting 1" geïmplementeerd wordt, dus het moet juist wel mogelijk blijven om op een later moment een status toe te voegen met een eerdere |
Ik zou dit graag even testen. Misschien is het een domme vraag, maar hoe kan ik tegen de https;//zaken-api.test.vng.cloud aanpraten? De credentials die ik gebruik voor https://zaken-api.vng.cloud werken niet. |
Dat is geen stomme vraag helaas :-( We zijn er druk mee bezig maar de token generator werkt momenteel alleen nog voor de productieomgeving. Ik heb zojuist onze ontwikkelaars hier nog naar gevraagd. |
Ik ben toch niet helemaal zeker of dit het probleem oplost.
Dat impliceert dat het automatisch bepaald wordt op basis van de status met de hoogste datum en dan is er dus eigenlijk niks veranderd. Dan is dit veld alleen een convenience property waardoor je als afnemer niet hoeft te sorteren op datum. |
Dat bedacht ik me gisteren ook al. Ik denk dat dit veld uit de bewerk operaties (POST, PUT, PATCH) gehaald moet worden en door de ZRC automatisch berekend/gevuld moet worden. |
Wat wel zou kunnen is dat er een regel komt dat je geen status mag injecteren, dus tussen reeds gezette statussen in kunt plaatsen. Wanneer indicatieLaatstGezetteStatus dan gezet wordt op het moment dat een status daadwerkelijk gezet wordt is het weliswaar geen afgeleid gegeven meer maar wel een "hard" gegeven. Lost dat het probleem op? Ik heb #2088 hiervoor aangemaakt. |
Helemaal lekker werkt het nog niet maar via https://zaken-auth.test.vng.cloud/ zou je een token moeten kunnen genereren etc. Omdat de Notificaties API herzien is en deze token tool nog uitgaat van de oude versie krijg je een 500 foutmelding wanneer je het vinkje voor superuser gebruikt. Bij handmatig per API instellen geeft ook een 500 error maar wanneer je dan terug gaat (in de browser, niet via de knop Home) blijkt de ingestelde autorisatie toch doorgevoerd te zijn. Er wordt nog naar gekeken, zodra het opgelost is laat ik het weten. |
Het verbieden van het "injecteren" van een status zou inderdaad de bug oplossen. (dat is "oplossingsrichting 1" in de originele beschrijving). Maar ik denk wel dat er dan (van ons of van anderen) een nieuw userstory aangemaakt gaat worden voor het kunnen wijzigen van de einddatum van een zaak. Al dan niet na het heropenen. Maar het is misschien wel zuiver om dat in een losstaand issue te doen. |
Ik heb nog niet de hele discussie gelezen, maar ik wil wel iets opmerken:
Dit is problematisch bij migraties van zaaksystemen naar ZGW API's via de API. Als je statushistorie migreert, dan is dat een hele goeie kandidaat om dat in parallel in plaats van sequentieel te doen. Er is dus geen garantie dat de statussen ook in volgorde van de werkelijkheid bij de Zaken API aankomen én verwerkt worden (race condition). Dit speelt ook in programmeertalen die een async event loop hebben - er is geen garantie over volgorde van de calls die gemaakt wordt in die situaties. |
Rest doorgelezen. Het lijkt mij perfect valide om t.b.v. correcties toch "eerdere statussen te injecteren". Er kan altijd iets fout gaan en dat moet je kunnen corrigeren. M.i. is er gewoon een bug/ambigue gedrag in de referentie-implementatie (onlangs hebben we dit zelfs gefixed in Open Zaak) waarbij Aangezien |
Dat zou het probleem inderdaad oplossen en dit is ook het gedrag dat ik oorspronkelijk had verwacht. Dit is een vrij simpele fix, gelijk aan wat ik hierboven "oplossingsrichting 2" heb genoemd. Als we dit gewoon als een bug zien (zo heb ik dit ook indgediend), hoeft er dus niet eens een aanpassing in de standaard voor te komen maar alleen bugfixes in de implementaties. Ik begrijp dat die bugfix in Open Zaak al is gedaan, blijkbaar in een nieuwere versie dan die ik getest heb, maar dat zou heel goed kunnen. Ik sluit niet uit dat er op termijn dan nog steeds een user story komt om de einddatum van de zaak te kunnen corrigeren, maar dat is dan veel minder urgent en mogelijk zelfs totaal overbodig. |
Het is dan nog wel een goed idee om dit gedrag ergens in de standaard te benoemen, zodat daar bij (nieuwe) implementaties naar verwezen kan worden. |
Misschien moet dat gewoon benoemd worden bij de status property op het zaak object in de OpenAPI spec, samen met een ZRC postman testcase (welke dan als een soort compliance test gebruikt kan worden). |
Het duurde even tot ik bovenstaande snapte maar als ik het goed begrijp wordt in de referentie implementatie de indicatielaatsGezetteStatus berekend op basis van recordID in plaats van datumStatusGezet? Dat is inderdaad een bug die er meteen uitgehaald moet worden. Hmm, stof tot nadenken.. |
Even voor de duidelijkheid, welke time-stamp bedoel je @sergei-maertens ?
Optie 2. zou dit probleem oplossen. Optie 1. is volgens mij juist hoe het nu werkt in de implementaties die ik getest heb en de oorzaak van het probleem. |
Wanneer je een status injecteert wordt De huidige status is de status met de hoogste waarde in Ik ga uitzoeken hoe bij het wegschrijven van een status de Edit: Zo wie zo moet |
Het is (of lijkt) ook helemaal logisch dat de status van de zaak de status is met de hoogste
In dit reproductie-scenario is de status van de zaak dus inderdaad de status met de hoogste Dat lijkt me in ieder geval niet correct. Als vervolgens de conclusie is dat En als dat het antwoord is, dan komt de vervolgvraag: hoe kan de einddatum van een zaak gecorrigeerd worden? Maar dat is dan een nieuwe functionele user-story. |
In het voorbeeld zijn foute gegevens opgeslagen. In de zin dat later een (eind)status is gezet met een eerdere Dat vervolgens de verkeerde status als laatstgezette status wordt berekend is niet de fout van afleiden uit de hoogste waarde van Tenzij de zaak als volgt doorlopen is:
Dat lijkt me niet de bedoeling? Tenzij de zaak inderdaad heropend is en de status Het is lastig hier goede validatie voor te bedenken. Dichttimmeren met een regel dat er altijd een |
Klopt, maar er is niets in de standaard dat zegt dat dit niet zou mogen en er is dus ook geen validatie op.
Als de regel inderdaad is "De status van de zaak is de status met de hoogste De oplossing zou dan dus een validatie zijn die stap 3 voorkomt. Dat zou kunnen zijn: Daarmee voorkom je dat de zaak voortijdig gesloten wordt, maar is het nog steeds mogelijk om bijvoorbeeld in een conversie scenario de overige statussen asynchroon toe te voegen. |
Zoals ik al eerder aangaf gaan we dan wel een user story aanmaken voor het corrigeren van de einddatum van de zaak. Want we kwamen achter deze bug bij het onderzoeken van scenario's voor het heropenen van zaken (iets wat al kan) en het daarna weer sluiten van de zaak met ofwel een gecorrigeerde einddatum ofwel met herstel van de oorspronkelijke einddatum. Dat is onmogelijk als de business rules zijn: |
Een zaak wordt afgesloten wanneer deze een eindstatus bereikt heeft, daar zou ik niet aan tornen.
Dat zou ik een goede regel voor validatie vinden. Wel zou ik een soort "beschrijving van goed gedrag" willen voorstellen dat bij het injecteren van statussen die een zaak eerder gehad heeft de |
Volgens mij geeft dat geen problemen toch? Een heropende zaak heeft geen einddatum meer, die is immers leeggemaakt bij het heropenen. Op het moment dat een zaak opnieuw een eindstatus bereikt wordt de einddatum weer gezet. Met de Zolang een heropende zaak geen eindstatus die tevens de laatste status is meer heeft is deze nog niet afgesloten en is de einddatum leeg. |
Weer even een simpel voorbeeld van een zaak met diezelfde twee statustypen
Maar het lijkt me zuiverder om deze wens niet verder in deze bug te bespreken, maar in een apart issue. |
Als je een issue aanmaakt ga ik daar dan op reageren :-) |
Ok, dat zal ik doen zodra we de user-stories daarvoor 100% scherp hebben. Dat zal waarschijnlijk zijn nadat we de functionaliteit voor het heropenen met deze beperking gedemonstreerd hebben. |
Oeps, al een hele discussie. Ik draag wat bij vanuit de functionele insteek, hoe het bedoeld is. Niet hoe dit in API's te vatten (daar zijn jullie goed in). |
Ik had notificaties gemist zie ik. De timestamp die ik bedoel is dus De status van de zaak = de status met meest recente (=hoogste) waarde In principe is het toch de bedoeling dat je een status aanmaakt voor het moment dat die status bereikt is. Als dat in het verleden ligt, prima, als dat "nu" is, dan wordt dat de nieuwe "huidige status" van de zaak. Dit laat je dus toe om een status met Een zaak heropenen is dan een nieuwe status "nu" zetten die niet eindstatustype is. Ik denk dat er misschien een beleving is dat status volgnummer alleen maar omhoog mag gaan, maar in het kader van correcties en potentieel werkelijk verloop lijkt me dat geen requirement. Is wel een vervelende ervaring voor de klant... |
Helemaal mee eens. Het feit dat een status nu geregistreerd wordt staat los van het moment waarop die status bereikt is. In |
de rest van de discussie kan ik me ook in vinden - extra validatie op het moment van zetten van eindstatus lijkt me een praktische oplossing, en misschien moet het inderdaad ook mogelijk worden om de einddatum expliciet te schrijven. Wel zou ik daar dan aandacht voor willen in de audittrails als dat gebeurt, omdat dit afwijkingen zijn t.o.v. normaal gedrag (wat Arjan ook beschrijft). Afwijkingen moeten inderdaaad als afwijkingen beschouwd worden, maar de API moet natuurlijk ontworpen worden zodat je deze technisch nog kan uitvoeren. Daar zit de uitdaging :D |
Reproductiescenario:
Zaak in behandeling
enZaak afgerond
, waarbijZaak afgerond
de status met het hoogstevolgnummer
is en daarmee de eindstatus van de zaakstatus.type = Zaak in behandeling
enstatus.datumStatusGezet = 10 april
status.type = Zaak afgerond
enstatus.datumStatusGezet = 1 april
Gevolg: de zaak krijgt einddatum 1 april en wordt in alle opzichten behandeld als een gesloten zaak. Maar de status van de zaak wordt teruggegeven als
Zaak in behandeling
en niet alsZaak afgerond
.Het lijkt duidelijk dat dit gedrag in ieder geval niet correct is, maar alle ZRC implementaties die ik getest heb gedragen zich zo (inclusief Open Zaak en de referentie-implementatie). Er zijn wel meerdere oplossingsrichtingen mogelijk om dit op te lossen, waarbij de keuze afhankelijk is van de scenario's die ondersteund moeten worden in de ZRC.
Oplossingsrichting 1: statussen moeten op volgorde in tijd gezet worden
Sta niet toe dat er een status aan een zaak wordt toegevoegd met een
datumStatusGezet
kleiner of gelijk aan de hoogste waarde vandatumStatusGezet
van de statussen die al bij de zaak bestaan. Daarmee kan er geen status "geïnjecteerd" worden in de tijdlijn van de zaak en kan bovenstaande probleem niet optreden.Dit lijkt een relatief simpele en doeltreffende oplossing, maar daarmee wordt het onmogelijk om het volgende te doen:
De beschreven oplossingsrichting zou stap 3 onmogelijk maken. Er is ook geen andere manier om de einddatum van een zaak te zetten of aan te passen. Dit is wel een noodzakelijke functionaliteit.
Oplossingsrichting 2: de laatst gezette status is de status van de zaak, ongeacht de waarde van
datumStatusGezet
Als de actuele status van de zaak niet wordt bepaald op basis van
datumStatusGezet
, maar op basis van welke status als laatste is toegevoegd, dan kan het probleem ook niet meer optreden en is het scenario voor het heropenen en daarna opnieuw sluiten met de oorspronkelijk datum WEL mogelijk. Het maakt wel de betekenis van het velddatumStatusGezet
enigszins ambigue.Oplossingsrichting 3: maak het mogelijk om een andere einddatum te zetten dan
datumStatusGezet
Gelijk aan oplossingsrichting 1, maar maak het mogelijk om bij het zetten van de eindstatus van de zaak, de einddatum van de zaak te bepalen anders dan via
datumStatusGezet
van de status. Bijvoorbeeld door het toevoegen van een extra optioneel veld bij het zetten van een statusdatumStatusVanKracht
. Als dit niet gevuld wordt, is het automatisch gelijk aandatumStatusGezet
en bepaalt dat dus de einddatum. Als het wel gezet wordt, isdatumStatusVanKracht
bepalend voor de einddatum van de zaak.The text was updated successfully, but these errors were encountered: