TOP-KT-010 - Validatie
Beschrijving
Om interoperabiliteit te kunnen waarborgen is het van belang dat iedereen dezelfde taal spreekt. Deze taal wordt afgedwongen middels validatie. Wanneer resources niet valide bevonden worden, moet er ook een duidelijke set aan afspraken zijn om te herleiden wƔt er fout bevonden wordt.
Overwegingen
Centrale validatie
Validatie van de resources vindt plaats op de FHIR resource service. Wanneer er een resource aangemaakt of geĆ¼pdatet wordt, moet deze voldoen aan een set van eisen. EĆ©n van deze eisen is conformiteit aan de officiĆ«le Koppeltaal profielen. Op deze manier kunnen enkel valide resources uitgewisseld worden. Validatie wordt door FHIR in de volgende categorieĆ«n opgedeeld (irrelevante categorieĆ«n voor Koppeltaal weggelaten):
Eis | Beschrijving |
---|---|
Structuur | Controleer of alle inhoud in de bron wordt beschreven door de specificatie en dat er niets extra's aanwezig is |
Kardinaliteit | Controleer of de kardinaliteit van alle eigenschappen correct is (min & max) |
Waardedomeinen | Controleer of de waarden van alle eigenschappen voldoen aan de regels voor de opgegeven typen (inclusief controleren of de meegegeven codes geldig zijn) |
Coding/CodeableConcept-bindingen | Controleer of de codes/displays in de Coding/CodeableConcept typen geldig zijn |
Invarianten | Controleer of de invarianten (regels voor gelijktijdig voorkomen, etc.) correct zijn gevolgd |
Profielen | Controleer of alle regels in profielen zijn gevolgd (inclusief die vermeld in de Resource.meta.profile, of in CapabilityStatement, of in een ImplementationGuide, of anderszins vereist door de context) |
Validatie-overzicht
De FHIR resource service MOET de volgende methoden uit de FHIR implementation guide implementeren:
Methode | XML | JSON | Structuur | Kardinaliteit | Waardedomeinen | Coding/CodeableConcept-bindingen | Invarianten | Profielen |
---|---|---|---|---|---|---|---|---|
XML Schema + Schematron | ā | ā | ā | ā | ā | ā | ||
JSON Schema | ā | ā | ā | ā | ā | |||
Validation Operation | ā | ā | ā | ā | ā | ā | ā | ā |
Koppeltaal Profielen
Elke resource die gebruikt wordt binnen Koppeltaal kent een eigen profiel. Een profiel wordt opgeleverd middels een StructureDefinition
Ā resource. Deze resource beschrijft welke eigenschappen een resource heeft, en bijvoorbeeld ook wat de kardinaliteit van elk veld is. De officiĆ«le Koppeltaal profielen zijn hier te vinden.
DeĀ StructureDefinition
Ā resources MOETEN door de FHIR resource service ingeladen te worden. Applicatie-instanties mogen deze niet zelf aanmaken of bewerken.
Daarnaast MOET elke resource die aangemaakt wordt, verwijzen naar het bijbehorende Koppeltaal profiel. Indien dit niet gebeurd MOET de server de request afkeuren middels een HTTP 422
en de melding welk profiel verwacht wordt in een OperationOutcome
.
Onderliggende bouwstenen
De Koppeltaal profielen zijn, waar mogelijk, gebaseerd op het nl-core
Ā profiel van Nictiz. Het nl-core
project maakt weer gebruik van het zorginformatiebouwstenen (ZIB
) profiel. Door het gebruik van deze zogenaamde ābase definitionsā wordt de kans op interoperabiliteit vergroot tussen andere standaarden en Koppeltaal die ook gebruik maken van nl-core en/of ZIBs.
Simplifier Releases
Koppeltaal voert releases uit in simplifier. Dit resulteer in packages op Node Package Manager (npm). Deze packages bevatten alle resources die nodig zijn voor de Koppeltaal-specifieke validatie. Ook bevat deze de resources uit de dependencies (nl-core
en zib
). Sommige FHIR resource services kunnen direct deze npm package downloaden en installeren.
Validatie
De FHIR resource service dwingt de bovenstaande profielen af. Zo MOET elke Resource - bij zowel eenĀ POST
Ā (Create) als eenĀ PUT
, PATCH
Ā (Update) - naar het bijbehorende profiel verwijzen. De URI van het profiel voor elke ondersteunde resource is te vinden in simplifier:
Deze URI moet meegegeven worden aan de Resource.meta.profile
Ā array.
Aangezien deĀ StructureDefinition
Ā exact beschrijft waar een Resource aan moet voldoen, wordt dit gebruikt om de Resources te valideren.
Foutmeldingen
Wanneer een resource niet door de validatie komt, zal de FHIR resource service reageren met een HTTP 422
error code. De exacte reden waarom hiervoor wordt in de response body beschreven middels een OperationOutcome
Ā resource. Let op dat deze outcome verschillende āseveritiesā heeft, enkel de severity error
zal leiden tot een 422
response:
{ "resourceType": "OperationOutcome", "text": { "status": "generated", "div": "<div xmlns=\\"<http://www.w3.org/1999/xhtml\\>"><h1>Operation Outcome</h1><table border=\\"0\\"><tr><td style=\\"font-weight: bold;\\">WARNING</td><td>[Patient, Line 1, Col 2]</td><td><pre>dom-6: 'A resource should have narrative for robust management' Rule 'A resource should have narrative for robust management' Failed</pre></td>\\n\\t\\t\\t</tr>\\n\\t\\t\\t<tr>\\n\\t\\t\\t\\t<td style=\\"font-weight: bold;\\">INFORMATION</td>\\n\\t\\t\\t\\t<td>[Patient.identifier[0], Line 1, Col 179]</td>\\n\\t\\t\\t\\t<td><pre>This element does not match any known slice defined in the profile <http://koppeltaal.nl/fhir/StructureDefinition/KT2Patient></pre></td>\\n\\t\\t\\t</tr>\\n\\t\\t\\t<tr>\\n\\t\\t\\t\\t<td style=\\"font-weight: bold;\\">ERROR</td>\\n\\t\\t\\t\\t<td>[Patient, Line 1, Col 2]</td>\\n\\t\\t\\t\\t<td><pre>Patient.birthDate: minimum required = 1, but only found 0 (from <http://koppeltaal.nl/fhir/StructureDefinition/KT2Patient>)</pre></td>\\n\\t\\t\\t</tr>\\n\\t\\t\\t<tr>\\n\\t\\t\\t\\t<td style=\\"font-weight: bold;\\">ERROR</td>\\n\\t\\t\\t\\t<td>[Patient.name[0], Line 1, Col 256]</td>\\n\\t\\t\\t\\t<td><pre>Patient.name:nameInformation.family: minimum required = 1, but only found 0 (from <http://koppeltaal.nl/fhir/StructureDefinition/KT2Patient>)</pre></td>\\n\\t\\t\\t</tr>\\n\\t\\t\\t<tr>\\n\\t\\t\\t\\t<td style=\\"font-weight: bold;\\">ERROR</td>\\n\\t\\t\\t\\t<td>[Patient.name[0], Line 1, Col 256]</td>\\n\\t\\t\\t\\t<td><pre>Patient.name:nameInformation.given: minimum required = 1, but only found 0 (from <http://koppeltaal.nl/fhir/StructureDefinition/KT2Patient>)</pre></td>\\n\\t\\t\\t</tr>\\n\\t\\t</table>\\n\\t</div>" }, "issue": [ { "severity": "warning", "code": "processing", "diagnostics": "dom-6: 'A resource should have narrative for robust management' Rule 'A resource should have narrative for robust management' Failed", "location": [ "Patient", "Line 1, Col 2" ] }, { "severity": "information", "code": "processing", "diagnostics": "This element does not match any known slice defined in the profile <http://koppeltaal.nl/fhir/StructureDefinition/KT2Patient>", "location": [ "Patient.identifier[0]", "Line 1, Col 179" ] }, { "severity": "error", "code": "processing", "diagnostics": "Patient.birthDate: minimum required = 1, but only found 0 (from <http://koppeltaal.nl/fhir/StructureDefinition/KT2Patient>)", "location": [ "Patient", "Line 1, Col 2" ] }, { "severity": "error", "code": "processing", "diagnostics": "Patient.name:nameInformation.family: minimum required = 1, but only found 0 (from <http://koppeltaal.nl/fhir/StructureDefinition/KT2Patient>)", "location": [ "Patient.name[0]", "Line 1, Col 256" ] }, { "severity": "error", "code": "processing", "diagnostics": "Patient.name:nameInformation.given: minimum required = 1, but only found 0 (from <http://koppeltaal.nl/fhir/StructureDefinition/KT2Patient>)", "location": [ "Patient.name[0]", "Line 1, Col 256" ] } ] }
$validate
operatie
Applicatie-instanties kunnen ook enkel resources valideren bij de FHIR resource service conform de specificatie.
Referentiƫle integriteit
De FHIR resource service dient referentiƫle integriteit af te dwingen. Dit is ook een vorm van validatie die uitgevoerd moet worden. De implementatiedetails en eisen zijn te vinden bij het topic Logische ID, bedrijfsidentifier, referenties en referentie integriteit#Referentie integriteit.
Links naar gerelateerde onderwerpen
Beschrijving | Link | Opmerking |
---|---|---|
FHIR implementation guide - validatie | https://www.hl7.org/fhir/r4/validation.html | |
Koppeltaal profielen | https://simplifier.net/Koppeltaalv2.0/~resources?category=Profile&fhirVersion=R4&sortBy=RankScore_desc | |
Koppeltaal profiel releases | https://simplifier.net/packages/koppeltaalv2.00 | |
Profielen afdwingen code voorbeeld | https://github.com/Koppeltaal/Koppeltaal-2.0-FHIR-HAPI-Server/blob/238f38636194e3c391ae721d98dc680b6562d20f/src/main/java/ca/uhn/fhir/jpa/starter/RepositoryValidationInterceptorFactoryR4.java#L65-L94 |