Verschillen tussen referentie-implementatie en KT-voorziening implementatie
Vanuit het testen op de referentie implementatie en de KT-voorziening implementatie zijn bevindingen gedaan die te maken hebben met verschillen in implementatie. Vanuit de standaard streven we ernaar om dit soort verschillen te voorkomen. De onderstaande tabel geeft gevonden verschillen weer die opgelost dienen te worden.
Eventuele bekende problemen in de KT-voorziening zijn opgenomen in https://vzvz.atlassian.net/wiki/spaces/KTSA/pages/27120884/Verschillen+tussen+referentie-implementatie+en+KT-voorziening+implementatie#Known-issues-KT-voorziening
FHIR Resource Provider verschillen | HAPI ondersteunt R4 (v4.0.1). Versie HAPI niet bekend. Waarschijnlijk v5.x.x. HAPI FHIR is gebaseerd op Java (JDK8) | Voorziening ondersteunt R4 (v4.0.1). | Opmerkingen |
---|---|---|---|
Een resource instantie creëren | Levert een payload op. In de FHIR specs staat dat de server zelf bepaalt of de volledige resource instantie wordt geretourneerd. | Levert alleen header informatie, om te voorkomen dat bv bij het aanmaken van een grote hoeveelheid FHIR resources alle aangemaakte resources in de response komen, een vragende applicatie kan zelf bepalen of het response gevuld moet zijn, mbv de parameters ‘prefer’ en de waarde ‘return’, zoals beschreven in de FHIR specs. | Voor de leverancier is dit wel belangrijk, zodat ze altijd alle header informatie moeten uitlezen en verwerken voor de status, versie en locatie (url) van de resource instantie. |
Een resource instantie verwijderen | Bij de referentieomgeving wordt een HTTP200 met OperationOutcome ‘successfully deleted ….’ geretourneerd. De OperationOutcome is niet gespecificeerd bij een geslaagde operatie en bij een verwijdering van een resource instantie verwacht je geen payload in een response. | Wordt een HTTP 204 geretourneerd | Als een operatie goed wordt uitgevoerd, hoeft alleen een HTTP status code geretourneerd te worden. Alleen bij een fout MOET er een OperationOutcome geretourneerd worden. Na het succesvol verwijdering van een resource instantie, MOET de server ofwel een 200 OK retourneren, als het antwoord een payload bevat of een 204 No Content with no response payload. Het makkelijkst is om een HTTP 204 te retourneren, omdat de server dan geen OperationOutcome hoeft te structureren, waar geen specificaties van zijn. |
Ondersteuning van basis interacties | Bij de referentieomgeving wordt ook de patch en conditionele operaties ondersteund. → Functie is inmiddels verwijderd uit de documentatie. | Voorziening ondersteunt niet de patch en conditionele operaties. | FHIR heeft de patch en conditionele operaties op trial (proef) staan totdat er meer ervaring is opgedaan met het gebruik ervan. De status (wijziging) zal worden beoordeeld in toekomstige versies van FHIR. Advies is om ze nu niet te gaan gebruiken in Koppeltaal zolang de status op trial staat. |
Header verschillen |
|
| We ondersteunen voor de Content_Type:
Voor zoekopdrachten (search)
|
Carriage returns in een response | Levert soms response geformatteerd op. Niet altijd ruwe data. | Levert elke response als ruwe data op. M.b.v. een '_pretty=true' parameter kan de data geformatteerd worden, afhankelijk van XML of JSON. Probleem hierbij is de validatie meldingen waar alle foutmeldingen refereren naar regel 1. | Moet de leverancier wel van bewust zijn. |
Het gebruik van de foutmelding 409/412 conflicten bij wijzigingen | Geeft bij conflicten een 409 terug | Geeft 412 terug | Wat is het verschil?
|
Paging | Ondersteunt Offset paging met parameter '_offset'. Is geen standaard FHIR, extra uitbreiding van HAPI. Client bepaalt navigatie. | Maakt gebruik van '_count' en navigatie links in Bundle. Standaard FHIR, maar is geen MUST maar een SHOULD voor ondersteuning van de server. Server bepaalt hier de navigatie. | Als de FHIR Resource Provider (of FHIR Store) geen Paging ondersteunt, kan er niet door een client applicatie gedoseerd door de aangeleverde resources genavigeerd worden. Bij ondersteuning van Paging, zou de client applicatie de navigatie linkjes moeten vertalen in Navigatie Buttons op de user interface (scherm). |
Authorization code flow bij OAuth2 | Bij opvragen van het Access_Token wordt het Access_Token leeg gelaten. NIET CONFORM SMART Launch/OAuth2 SPECS - authorization code flow. zie: https://datatracker.ietf.org/doc/html/rfc6749#section-4.1 | Door Remco Schaar bevestigd. | |
Gegenereerde sleutel paren | Zowel HAPI als KT-voorziening MOETEN de volgende algoritmes kunnen ondersteunen: RS256, RS384, en RS512 en ES256, ES384, en ES512. → Zie specs TOP-KT-020. Deze wordt in de JWT header meegegeven. Zie "alg". | ||
Verlopen access_token | HAPI retourneert HTTP401 "diagnostics": "Unauthorized" | retourneert HTTP401 "diagnostics": "security/suppressed", "details": { "text": "security/suppressed" | Zolang ze dezelfde HTTP 401 terug geven, betekent dat er authenticatie is vereist voor die interactie die geprobeerd is. Eis:
Opmerking de voorziening (server) bepaalt zelf de content van de OperationOutcome. |
Profielen | Meta.profile MOET gevuld worden met Koppeltaal profiel. | Meta.profile mag gevuld worden. Indien niet gevuld, wordt er teruggevallen op FHIR R4. | We gaan bij Koppeltaal 2.0 afdwingen om het Meta.profile te vullen met een profiel bij zowel POST als PUT. Indien NIET gevuld een HTTP 422 met melding "No matching profile" retourneren. |
Diakritische tekens | HAPI gaat goed om met diakritsche tekens | Voorziening heeft problemen met bepaalde diakritische tekens in XML. Resulteert in foutmelding HTTP 403. Diakritische tekens in JSON worden wel goed verwerkt. Is opgelost. | UTF-8 is een methode om Unicodes in bytes te coderen. Zie ook beschrijving: TOP-KT-002 - Basis interacties - [oud] voor UTF-8, XML en JSON. |
XML Sequence | Indien de elementen van een FHIR resource in een andere XML volgorde worden aangeboden, dan is vastgelegd in de StructureDefinition (of baseDefinition) genereert HAPI de melding 'out of order' | Voorziening toont (of her rangschikt) de element van een FHIR resource in de juiste sequence, zoals vastgelegd is in de StructureDefinition (of baseDefinition) en geeft dus niet de melding 'out of order' | Elementen in de StructureDefinition (de FHIR profiel definities) MOETEN in dezelfde volgorde staan als de baseDefinition van de resource (XML Schema van een FHIR resource). Zie voor meer informatie de FHIR specificaties op http://hl7.org/fhir/R4/structuredefinition.html#interpretation Het is dus niet mogelijk om de volgorder hiervan te wijzigen. Indien de FHIR resource in JSON wordt gepresenteerd, maakt de volgorde van de velden (elementen) niet uit |
Search
| In sommige gevallen wordt er het element _total in de Bundle NIET teruggegeven. Onduidelijk is wanneer wel of niet | Altijd wordt het element _total teruggeven Parameter _total=accurate wordt door Intersystems niet ondersteund. | De parameter _total heeft de status trial-use bij de FHIR community, in afwachting van ervaring in de echte wereld van het gebruik ervan. Zou wel graag een consistente ervaring willen opdoen. |
Zie: The feed documents in a paged feed are tied together with the following link relations:
Paged feed documents MUST have at least one of these link relations present, and should contain as many as practical and applicable. | Er wordt bij een search geen "last" link teruggegeven, wel "self", "next" en "previous" | Voldoet aan RFC5005. Geeft alle link relaties terug. | Een server KAN de klant informeren over het _total aantal resources dat is geretourneerd door de interactie waarvoor de resultaten worden opgeroepen met behulp van de Bundle.total. Zie vorige item. Via de "last" link kan men meteen naar het laatste record gaan. Heeft veel voordelen als het _total groot is. Graag ook "last" link retourneren bij een Search. |
Het zoeken op _elementen (velden met waarden) in een resource instantie, zoals door FHIR beschreven. Voorbeeld zoeken op identifier en active: GET http://hapi.fhir.org/baseR4/Patient?_elements=identifier,active | Wordt ondersteund door HAPI | Oplossing voor _elements wordt geïmplementeerd in versie 2022.2 (huidige versie is 2022.1). Probleem hertesten als versie uitgebracht is (Jira IF-2597) Is opgelost. | Koppeltaal wacht op nieuwe versie van InterSystems (Jira IF-3171) |
Maximum in respons. | Een zoekopdracht levert maximaal 40 records op. | Een zoekopdracht levert maximaal 100 records op. | Gebruik paging voor ophalen niet getoonde respons. |
AuditEvent: Er zijn veel kleine verschillen. Bijvoorbeeld de notering van datum/tijd, en velden de niet verplicht zijn, die de ene wel veld en de ander niet. Hiernaast worden de belangrijkste verschillen genoemd. |
|
| |
AuditEvent notifcatie | Indien notificatie niet afgeleverd kan worden, zorgt HAPI ervoor dat dit nog 20 keer geprobeerd wordt. Voor elke poging wordt een AuditEvent gelogd. Dit retry-mechanisme is geen onderdeel van de standaard. |
|
|
Abonneren/notificeren: |
|
| Extra specificaties KT-voorziening omgeving zijn te vinden in document: Technical Documentation for Koppeltaal 2 Server. Te vinden op: Specificaties Itzos. |
Search met foute parameter | Geeft HTTP400 met error melding. | Geeft HTTP200 met in respons error melding en de records obv search excl. foute paremeter. | Beide responses zijn conform FHIR. |
Updaten resource Device | Is voor geautoriseerden mogelijk | Is geheel afgeschermd i.v.m. risico's voor werking applicatieinstantie. Respons HTTP400, diagnostics:<HSFHIRErr>InteractionNotSupported, details: text:Interaction 'update' is not supported for resource type 'Device'. | |
Conformiteit | Is conform specificaties | Parameter scopes_supported: laatste 2 items ziijn "user/*.crud" en "user/*.crud?resource-origin=" ipv 'system/.... | De waarde "system/*.cruds" of "user/*.cruds" is niet betekenisvol voor de gebruiker omdat er geen access_token wordt teruggegeven uit de SMART-on-FHIR token request. |
Resource-origin in Post en Put | In Post mag geen resource-origin worden meegegeven. Dit geeft een foutmelding. In Put mag een resource-origin worden meegegeven, maar deze wordt toegevoegd indien niet aanwezig. Een foute resource-origin geeft een foutmelding. | Het in Post meegeven van een (foute) resource-origin wordt genegeerd. Resource wordt aangemaakt. In Put mag een resource-origin meegegeven worden. Indien deze niet correct is, wordt deze genegeerd en de respons voorzien van een correcte resource-orgin. | |
Patient.name.use / Practitioner.name.use | Is verplicht volgens profiel, maar wordt bij ontbreken ervan in de Referentieomgeving, niet als fout gegeven bij een Xml bericht. | Zowel voor Json als Xml wordt een foutmelding gegeven als het element ontbreekt. | |
Device |
|
| |
Volgorde authenticatie/autorisatie | In de referentieomgeving wordt eerst volgens spec de autorisatie en authenticatie uitgevoerd, voordat een eventuele foutmelding als HTTP422 gegeven wordt. | Een foutmelding als HTTP422 wordt eerst gegeven, en na oplossen pas een HTTP403 indien niet geautoriseerd. Dit is omgekeerd t.o.v. de Referentieomgeving en niet volgens specs (topic12-eis009). | Besloten is om de volgorde van de voorziening niet aan te passen. Software maakt het op deze manier ook mogelijk om batch/bulk verwerking toe te kunnen passen. Bovendien is aanpassing zeer complex, terwijl de volgorde niet tot grote problemen kan leiden. |
Autorisatie / referentiecontrole | Hiernaast genoemde controle komt niet voor in de Referentieomgeving. | Het is niet mogelijk om een create of update van een resource uit te voeren als deze een referentie bevat voor een resource waar betreffende applicatie geen leesrechten voor heeft. |
|
|
|
|
|
Known issues KT-voorziening
Probleem | VZVZ Intern Incident nummer | Omschrijving | Workaround | Opmerking |
---|---|---|---|---|
Subscription parameter probleem. | KTL-8 | Het is niet mogelijk om active=true te gebruiken als parameter. | Het gebruik van active=1 werkt wel Het zoeken op active=0 geeft geen resultaat. | Dit is opgelost in een volgende versie van Intersystems Iris en zal bij de eerst volgende upgrade worden opgelost. |
|
|
| ||
|
|
|