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 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 [TODO: Header link] Logische ID, bedrijfsidentifier, referenties en 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 |